Nginx【學習筆記】

Nginx

1. nginx可以做什么?

  1. 可針對靜態資源高速高并發訪問及緩存。

  2. 可使用反向代理加速,并且可進行數據緩存。

  3. 具有簡單負載均衡、節點健康檢查和容錯功能。

  4. 支持遠程FastCGI服務的緩存加速。

  5. 支持FastCGI、Uwsgi、SCGI、Memcached Servers的加速和緩存。

  6. 支持SSL、TLS、SNI。

  7. 具有模塊化的架構:過濾器包括gzip壓縮、ranges支持、chunked響應、XSLT、SSI及圖像縮放等功能。在SSI過濾器中,一個包含多個SSI的頁面,如果經由FastCGI或反向代理處理,可被并行處理。

###1.1 作為WEB服務的話支持

  1. 支持基于名字、端口及IP的多虛擬主機站點。

  2. 支持Keep-alive和pipelined連接。

  3. 可進行簡單、方便、靈活的配置和管理。

  4. 支持修改Nginx配置,并且在代碼上線時,可平滑重啟,不中斷業務訪問。

  5. 可自定義訪問日志格式,臨時緩沖寫日志操作,快速日志輪詢及通過rsyslog處理日志。

  6. 可利用信號控制Nginx進程。

  7. 支持3xx-5xx HTTP狀態碼重定向。

  8. 支持rewrite模塊,支持URI重寫及正則表達式匹配。

  9. 支持基于客戶端IP地址和HTTP基本認證的訪問控制。

  10. 支持PUT、DELETE、MKCOL、COPY及MOVE等較特殊的HTTP請求方法。

  11. 支持FLV流和MP4流技術產品應用。

  12. 支持HTTP響應速率限制。

  13. 支持同一IP地址的并發連接或請求數限制。

  14. 支持郵件服務代理。

###1.2 應用場景

(1)作為Web服務軟件

(2)反向代理或負載均衡服務

(3)前端業務數據緩存服務

 ? ? ?  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires ? ?  30d;}
?location ~ .*\.(js|css)?${expires ? ?  12h;}

###1.3 優點

  1. 支持高并發:能支持幾萬并發連接(特別是靜態小文件業務環境)。

  2. 資源消耗少:在3萬并發連接下,開啟10個Nginx線程消耗的內存不到200MB。

  3. 可以做HTTP反向代理及加速緩存,即負載均衡功能,內置對RS節點服務器健康檢查功能,這相當于專業的Haproxy軟件或LVS的功能。

  4. 具備Squid等專業緩存軟件等的緩存功能。

  5. 支持異步網絡I/O事件模型epoll(Linux 2.6+)。

?

2. apache的特點

  1. Apache 2.2版本非常穩定強大,據官方說,Apache 2.4版本性能更強。

  2. Prefork模式取消了進程創建開銷,性能很高。

  3. 處理動態業務數據時,因關聯到后端的引擎和數據庫,瓶頸不在Apache上。

  4. 高并發時消耗系統資源相對多一些。

  5. 基于傳統的select模型,高并發能力有限。select 模型 也就是 同步 epoll 異步

  6. 支持擴展庫,可通過DSO、apxs方法編譯安裝額外的插件功能,不需要重新編譯Apache。

  7. 功能多,更穩定,更安全,插件也多。

  8. 市場份額在逐年遞減。

2.1. 網絡模式

同步網絡模式 select

每個請求的狀態始終在維護著 (消耗好多資源)

異步網絡模式 epoll 處理服務器端的并發 請求人數越多 服務器肯定吃緊 系統資源也會緊張 I/O效率也會很慢

不定期將你的請求 篩選出來 直接告訴你 不用挨個select

epoll

每個請求 我不再維護你的狀態 如果有請求 就找我 找到了 給你服務 找不到拉倒

?

3. lighttpd的特點

  1. 基于異步網絡I/O模型,性能、并發都與Nginx相近。

  2. 擴展庫是SO模式,比Nginx靈活。

  3. 目前國內的使用率比較低,安全性沒有Apache和Nginx好。

  4. 通過插件(mod_secdownload)可實現文件URL地址加密(優點)。

  5. 社區不活躍,市場份額較低。

圖說三個服務器的性能對比

?

4. 為什么nginx處理并發能力更強?

?

?

5. 如何選擇web服務器?

  1. 靜態業務:若是高并發場景,盡量采用Nginx或Lighttpd,二者首選Nginx。

  2. 動態業務:理論上采用Nginx和Apache均可,建議選擇Nginx,為了避免相同業務的服務軟件多樣化,增加額外維護成本。動態業務可以由Nginx兼做前端代理,再根據頁面元素的類型或目錄,轉發到后端相應的服務器進行處理。

  3. 既有靜態業務又有動態業務:采用Nginx。

此外,如果并發不是很大,又對Apache很熟悉,采用Apache也是可以的,Apache 2.4版本也很強大,并發連接數也有所增加。總的來說,在滿足需求的前提下,首先選擇自己最擅長的軟件,若發現了更好的軟件,可在掌握新軟件之后逐步替換。雖然動態和靜態業務都傾向于選擇Nginx,但是大前提是自己要熟練掌握Nginx。切記,在工作中不要盲目選擇軟件,這可能最終會導致自己無法控制局面,從而給企業帶來災難性的損失。

?

?

6. Ubuntu下nginx安裝和虛擬站點配置方式

如果在Ubuntu16.04下使用apt安裝nginx,安裝完畢后其工作目錄設置如下:

  • nginx站點配置目錄:/etc/nginx/

    • 其中主配置為nginx.conf

    • sites-available子目錄存放站點配置文件,其中有一個default文件為虛擬站點的配置模板,自己的虛擬站點可以以此為模板進行配置。

    • sites-enabled子目錄存放一個對應站點配置文件的軟連接。必須在sites-availabel生成站點的配置文件,然后到sites-enabled添加對應的軟連接。

  • 默認站點根目錄 : /var/www/html/

  • 日志文件目錄:/var/log/nginx/

    • error.log記錄站點的錯誤,如果要查看詳細的錯誤信息,可以打開該文件查看

以www.blog.com站點為例說明多個虛擬站點配置的方法:

#安裝nginx
sudo service apache2 stop  #停止apache
sudo apt-get install nginx-full -y
?
#虛擬站點配置
#1.首先切換目錄到sites-available目錄
cd /etc/nginx/sites-available
?
#2.復制虛擬站點配置模板,生成自己虛擬站點的配置文件
sudo cp default www.blog.com.conf ?
?
#3 編輯模板
#---------------------以下為配置內容-------------------
server {listen 80; #監聽端口
?#站點的根目錄root /var/www/html/www.blog.com;
?# Add index.php to the list if you are using PHP#網站默認首頁打開順序index index.html index.htm; #站點名稱,可以有多個名稱,中間用空格隔開server_name www.blog.com blog.com; 
}
?
#------------------到此結束------------------------------
#這個模板比較簡單,如果有復雜的要求,請以此為基礎進行改進
?
#4 保存退出
:wq
?
#5 切換到sites-enabled目錄下,創建軟連接
cd ../sites-enabled
sudo ln -s /etc/nginx/sites-available/www.blog.com.con ? www.blog.com.conf
?
#6 重啟nginx服務
sudo service nginx restart  (start/stop)
或者
sudo /etc/init.d/nginx restart
?
#7 切換到站點根目錄(根據你自己的設定進行),我假定站點根目錄是/var/www/html
cd /var/www/html
sudo chmod -R 755 www.blog.com
#編輯index.html
?
<html>
<head>
<meta charset='utf-8'>
<title>瘋狂程序員的博客</title>
</head>
<body>
?
<h1>瘋狂的程序員</h1>
?
</body>
</html>
#保存退出
:wq
?
#8 切換到windows系統下,編輯C:\Windows\System32\drivers\etc\hosts文件,在末尾增加:
#ip為你虛擬機的ip地址
192.168.48.3  www.blog.com ? 
?
#9 在windows系統下瀏覽器里輸入 :  www.blog.com
看看是否是你的頁面

7.centos下nginx安裝和配置

  • 添加源:

    sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
  • 安裝Nginx

    sudo yum install -y nginx
  • 啟動Nginx并設置開機自動運行

    sudo systemctl start nginx.service
    sudo systemctl enable nginx.service
  • 測試,在瀏覽器中輸入localhost,看缺省網站

##8. 負載均衡

當一臺服務器的單位時間內的訪問量越大時,服務器壓力就越大,大到超過自身承受能力時,服務器就會崩潰。為了避免服務器崩潰,讓用戶有更好的體驗,我們通過負載均衡的方式來分擔服務器壓力。

角色ip作用
lvs負載均衡10.11.59.220請求分擔
web0110.11.59.155輪詢的web服務器
web0210.11.59.154輪詢的web服務器
  • 這三臺機子要求都安裝了nginx環境,web01和web02結構應該是一樣的

8.1 負載均衡服務的配置

 ? #連接池upstream www_server_pools {  #www_server_pools自定義的連接池名稱server 10.11.59.154; ?  #連接的服務器,可以ip或者是域名server 10.11.59.155;} ? 
?server {listen ? ? ? 80;server_name  www.caoliu.com;
?location / {# root ? /data/www;# index index.php index.html index.htm;proxy_pass  http://www_server_pools;#http://連接池名稱proxy_set_header ? Host $host; ? #把主機的header頭發給輪詢的服務器proxy_set_header ? X-Forward-For  $Remote_addr; #獲取真實的ip地址} ?}

8.2 upstream模塊

是nginx支持負載均衡的模塊,nginx_http_upstream_moudle,它所支持的代理方式:

  • proxy_pass

  • fast_cgi

  • memcache_pass

8.3 常用的輪詢算法

  • rr輪詢算法:靜態調度算法,按照請求的時間順序逐一分配到不同的服務器,如果服務器down掉,就不再向其轉發請求

  • wrr 權重算法,靜態調度算法

     ? upstream www_server_pools {server 10.11.59.154 weight=1; ?server 10.11.59.155 weight=3;#這個服務器得到的轉發是上面的3倍}
  • ip_hash 根據客戶端ip哈希的結果確定訪問那個服務器。

      upstream www_server_pools {server 10.11.59.154;server 10.11.59.155;ip_hash;}
  • 第三方的算法

    • fair 按照服務器忙閑,優先將請求給工作量小的服務器

    • url_hash 按照url哈希的結果訪問不同服務器

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456546.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456546.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456546.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第四次作業類測試代碼+036+吳心怡

一、類圖 二、代碼 package application; public class Commission { /* * hp&#xff1a;耳機 80元 mpc&#xff1a;手機殼 10元 cpsp&#xff1a;手機貼膜 8元 */ public float calculate(String line) { int hp 0, mpc 0, cpsp 0; String[] input null; float money 0;…

LSI/LSA算法原理與實踐Demo

目錄&#xff1a;1、使用場景2、優缺點3、算法原理3.1、傳統向量空間模型的缺陷3.2、Latent Semantic Analysis (Latent Semantic Indexing)3.3、算法實例 4、文檔相似度的計算5、對應的實踐Demo 目錄&#xff1a; 1、使用場景 文本挖掘中&#xff0c;主題模型。聚類算法關注…

解決: ubuntu18.04沒有網絡直連

初次安裝ubuntu 18.04, 發現沒有網絡. 直接上我遇到的這個問題的解決方法 sudo service NetworkManager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service NetworkManager start 未能解決問題的方法有 修改/etc/netplan/*.yaml 修改/etc/NetworkMana…

Linux學習134 Unit 8

Unit8 ldap網絡帳號1.ldap是什么ldap目錄服務認證&#xff0c;和windows活動目錄類似&#xff0c;就是記錄數據的一種方式2.ldap客戶端所須軟件yum sssd krb5-workstation -y3.如何開啟ldap用戶認證authconfig-tui┌────────────────┤ Authentication Configu…

FastText原理總結

目錄&#xff1a;1、應用場景2、優缺點3、FastText的原理4、FastText詞向量與word2vec對比 目錄&#xff1a; 1、應用場景 fastText是一種Facebook AI Research在16年開源的一個文本分類器。 其特點就是fast。相對于其它文本分類模型&#xff0c;如SVM&#xff0c;Logistic …

解決 :sudo:/etc/sudoers 可被任何人寫

問題&#xff1a; sudo:sudo /etc/sudoers is world writable sudo:no valid sudoers sources found ,quitting sudo:unable to initialize policy plugin 解決方案&#xff1a; 方法一: 1.開機按shift或esc進入ubantu高級模式 再進行recovery模式 2.選擇root命令行模式 3.…

sqlserver數據庫類型對應Java中的數據類型

SQL Server 類型JDBC 類型 (java.sql.Types)Java 語言類型 bigint BIGINT long timestamp binary BINARY byte[] bit BIT boolean char CHAR String decimal money smallmoney DECIMAL java.math.BigDecimal float DOUBLE double int INTEGER int image v…

Doc2Bow簡介與實踐Demo

Doc2Bow是Gensim中封裝的一個方法&#xff0c;主要用于實現Bow模型&#xff0c;下面主要介紹下Bow模型。 1、BoW模型原理 Bag-of-words model (BoW model) 最早出現在自然語言處理&#xff08;Natural Language Processing&#xff09;和信息檢索&#xff08;Information Ret…

linux nginx完全卸載

比較靠譜的解決辦法是&#xff1a; root權限下載命令行敲入如下命令&#xff1a; sudo rm -rf /etc/nginx/ sudo rm -rf /usr/sbin/nginx sudo rm /usr/share/man/man1/nginx.1.gz sudo apt-get remove nginx* 原理就是刪除關聯文件以及文件夾。

[LeetCode]Basic Calculator

題目&#xff1a;Basic Calculator 給定一個合法的運算表達式&#xff0c;該表達式中只包含數字、、-、 、(、)。 思路&#xff1a; 簡單思考不用看成加減兩種運算&#xff0c;直接看成加法&#xff0c;只不過由正負&#xff1b; 如何處理括號呢&#xff1f;因為只看成加法&…

SPOJ 694/705 后綴數組

思路&#xff1a; 論文題*n Σn-i-ht[i]1 就是結果 O(n)搞定~ //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 55555 int cases,n,cntA[N],cntB[N],A[N],B[N],rk[N],sa[N],tsa[N],ht[N]; char…

如何用余弦定理來進行文本相似度的度量

在做文本分析的時候&#xff0c;經常會到說將文本轉化為對應的向量&#xff0c;之后利用余弦定理來計算文本之間的相似度。但是最近在面試時&#xff0c;重復上面這句話&#xff0c;卻被面試官問到&#xff1a;“什么是余弦定理&#xff1f;”當時就比較懵逼&#xff0c;于是把…

Mongodb 備份和恢復

為什么80%的碼農都做不了架構師&#xff1f;>>> Mongodb 備份和恢復 mongodump -h host -u "username" -p "userpass" -d dbname -o backfilename tar -cvzf backfilename.tar backfilename tar -xvzf backfilename.tar mongorestore -h…

【linux】Ubuntu 18.04 設置桌面快捷啟動方式

使用Ubuntu終端進行打開&#xff1a; 方法一&#xff08;使用vim&#xff09;&#xff1a; sudo vi /usr/share/applications/pycharm.desktop 方法二&#xff08;使用gedit&#xff09;&#xff1a; sudo gedit /usr/share/applications/pycharm.desktop 然后就會彈出一個…

在 Pycharm下使Python2和Python3共用Anaconda中的各種庫/包的解決方法

參考&#xff1a;https://www.cnblogs.com/MoonST/p/7610460.html 目錄&#xff1a;前言&#xff1a;1、同時下載兩個版本的anaconda2、主版本conda的安裝3、輔助版本Anaconda的安裝 目錄&#xff1a; 前言&#xff1a; 最近在看一些機器學習方面的教程&#xff0c;里面的一…

form表單元素設置只讀

form表單元素設置只讀 CreateTime--2017年5月5日11:42:41 Author:Marydon 1.設置文本框只讀 <!-- 方法一&#xff1a;簡寫 --> <input type"text" name"" value"文本框" class"" readonly/> <!-- 方法二&#xff1a;…

MySQL安裝和完全卸載-Linux ubantu18.04

MySQL數據庫 千萬不要安裝5.7版本全是坑~&#xff01;&#xff01; 千萬不要安裝5.7版本全是坑~&#xff01;&#xff01; 千萬不要安裝5.7版本全是坑~&#xff01;&#xff01; ubantu18.04版本 正確道路應該是走安裝MySQL 8.0&#xff1a; 第一步&#xff1a;更新文件…

機器學習中的數學基礎相關知識總結

文章目錄目錄&#xff1a;前言&#xff1a;1、導數(曲線變化的快慢)、二階導數&#xff08;曲線斜率變化的快慢特別是反映曲線的凸凹性&#xff09;的概念。2、常用的導數公式&#xff1a;3、微分和積分的數學含義&#xff1a;4、泰勒公式及含義5、梯度的概念及數學含義&#x…

Linux中python的開發環境配置(虛擬環境)

1 pyenv pyenv是一個Python版本管理工具&#xff0c;它能夠進行全局的Python版本切換&#xff0c;也可以為單個項目提供對應的Python版本。使用pyenv以后&#xff0c;可以在服務器上安裝多個不同的Python版本&#xff0c;也可以安裝不同的Python實現。不同Python版本之間的切換…

第一個沖刺周期-第三天

一、先把數據庫弄好&#xff0c;然后連接上&#xff0c;寫一個測試用例&#xff0c;看看能不能調用數據&#xff0c; 增刪改查是否正確&#xff0c;可以了的話&#xff0c;這一部分就結束了 二、 然后去寫UI層&#xff0c;先寫XML&#xff0c;把界面效果做出來 三、 然后寫UI…