首頁 > 後端開發 > php教程 > 解析Nginx設定檔

解析Nginx設定檔

WBOY
發布: 2016-08-08 09:31:31
原創
1030 人瀏覽過
        Nginx安裝完畢後,會產生對應的安裝目錄,根據前面的安裝路徑,Nginx的設定檔路徑為/opt/nginx/conf,其中nginx.conf為Nginx的主設定檔。這裡重點介紹下nginx.conf這個設定檔。
         Nginx設定檔主要分成四部分:main(全域設定)、server(主機設定)、upstream(負載平衡伺服器設定)和 location(URL符合特定位置的設定)。 main部分設定的指令將影響其他所有設定;server部分的指令主要用於指定主機和連接埠;upstream指令主要用於負載平衡,設定一系列的後端伺服器;location部分用於匹配網頁位置。這四者之間的關係式:server繼承main,location繼承server,upstream既不會繼承其他設定也不會被繼承。
         在這四個部分當中,每個部分都包含若干指令,這些指令主要包含Nginx的主模組指令、事件模組指令、HTTP核心模組指令,同時每個部分也可以使用其他HTTP模組指令,例如Http SSL模組、HttpGzip Static模組和Http Addition模組等。
下面透過一個Nginx設定實例,詳細介紹下nginx.conf每個指令的意義。為了能更清楚地了解Nginx的結構和每個設定選項的意義,這裡依照功能點將Nginx設定檔分為7個部分逐次講解,以下就圍繞這7個部分進行介紹。

1.Nginx的全域配置
下面這段內容是對Nginx的全域屬性配置,程式碼如下:

[html] view plaincopy

  1. user  nobody nobody;  
  2. worker_processes  4
  3. pid        logs/nginx.pid;  
  4. worker_rlimit_nofile 6553555;worker_rlimit_nofile 6553555;
  5. events{  
  6.  use epoll;  
  7.  worker_connections     
  8. 對上面這段程式碼中每個設定選項的意義解釋如下:
  9. user是個主模組指令,指定Nginx Worker進程運行用戶以及用戶組,預設由nobody帳號運行。
worker_processes是個主模組指令,指定了Nginx要開啟的進程數。每個Nginx進程平均耗費10M~12M記憶體。根據經驗,一般指定一個行程就夠了,如果是多核心CPU,建議指定和CPU的數量一樣的行程數即可。
error_log是個主模組指令,用來定義全域錯誤日誌檔。日誌輸出等級有debug、info、notice、warn、error、crit可供選擇,其中,debug輸出日誌最為最詳細,而crit輸出日誌最少。 
pid是個主模組指令,用來指定進程id的儲存檔案位置。
worker_rlimit_nofile用來指定一個nginx程序可以開啟的最多檔案描述符數目,這裡是65535,需要使用指令「ulimit -n 65535」來設定。
events指令是設定Nginx的工作模式及連線數上限。

[html] view plaincopy

events{  

use epoll;  
  1. }  

  2. use是個事件模組指令,用來指定Nginx的工作模式。 Nginx支援的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是標準的工作模式,kqueue和epoll是高效率的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系統。對於Linux系統,epoll工作模式是首選。
    worker_connections也是事件模組指令,用來定義Nginx每個行程的最大連線數,預設是1024.最大客戶端連線數由worker_processes和worker_connections決定,即Max_client=worker_processes*worker_connections,當反向代理時,max_clients變成:max_clients = worker_processes * worker_connections/4。
    進程的最大連線數受Linux系統進程的最大開啟檔案數限制,在執行作業系統指令「ulimit -n 65536」後worker_connections的設定才能生效。

    2.HTTP伺服器設定
    接下來開始進行HTTP伺服器設定。
    下面這段內容是Nginx對HTTP伺服器相關屬性的配置,程式碼如下:

    [html] view plaincopy

    1. http{  
    2. include      conf/mime.types 
    3. log_format main '$remote_addr - $remote_user [$time_local] '  
    4.  '"$request" $status $bytes_sent '  
    5.  '"$http_referer" "$http_user_agent
    6.  log_format download '$remote_addr - $remote_user [ $time_local] '  
    7.  '"$request" $status $bytes_sent '  
    8.  '"$_referer" http_range" "$sent_http_content_range"';  
    9. client_max_body_size  20m;  
    10. client_header_buffer_size    32K;  
    11. large_client_header_buffers  4 32k;  
    12. Sendfile  on;  
    13. tcp_nopush     on;  
    14. tcp_nodelay    on;  
    15. keepalive_timeout 60;  
    16. client_header_timeout  10;  
    17. client_body_timeout    10;  
    18. 下面詳細介紹下這段程式碼中每個設定選項的含義。 include是個主模組指令,實現設定檔所包含的檔案的設定,可以減少主設定檔的複雜度。類似Apache中的include方法。 default_type屬於HTTP核心模組指令,這裡設定預設類型為二進位流,也就是當檔案類型未定義時使用這種方式,例如在沒有配置PHP環境時,Nginx是不予解析的,此時,用瀏覽器存取PHP檔案就會出現下載視窗。
    19. 下面的程式碼實現日誌格式的設定。
    20. [html] view plaincopy
    21. log_format main '$remote_addr - $remote_user [$time_local] '  🎠
    '"$http_referer" "$http_user_agent" '  


    '"$gzip_ratio"';  

    '"$gzip_ratio"';  

    log_format download '$remote_addr - $remote_user [$time_local]quest '  '  

      '"$http_referer" " $http_user_agent" '  
    1. '"$http_range" "$sent_http_content_range"';  

    2. log_format是Nginx的HttpLog模組指令,用來指定Nginx日誌的輸出格式。 main為此日誌輸出格式的名稱,可以在下面的access_log指令中引用。
      client_max_body_size用來設定允許客戶端請求的最大的單一檔案位元組數。
      client_header_buffer_size用於指定來自客戶端請求頭的headerbuffer大小。對於大多數請求,1K的緩衝區大小已經足夠,如果自訂了訊息頭或有更大的Cookie,可以增加緩衝區大小。這裡設定為32K。
      large_client_header_buffers用來指定客戶端請求中較大的消息頭的快取最大​​數量和大小, “4”為個數,“128K”為大小,最大緩存量為4個128K。
      sendfile參數用於開啟高效能檔案傳輸模式。將tcp_nopush和tcp_nodelay兩個指令設定為on用於防止網路阻塞。
      keepalive_timeout設定客戶端連線保持活動的逾時時間。在超過這個時間之後,伺服器會關閉該連線。
      client_header_timeout設定客戶端請求頭讀取逾時時間。如果超過這個時間,客戶端還沒有發送任何數據,Nginx將傳回「Request time out(408)」錯誤。
      client_body_timeout設定客戶端請求主體讀取逾時時間。如果超過這個時間,客戶端還沒有發送任何數據,Nginx將回傳「Request time out(408)」錯誤,預設值是60。
      send_timeout指定回應客戶端的逾時時間。這個逾時僅限於兩個連線活動之間的時間,如果超過這個時間,客戶端沒有任何活動,Nginx將會關閉連線。

      3.HttpGzip模組配置
      下面配置Nginx的HttpGzip模組。這個模組支援線上即時壓縮輸出資料流。要查看是否安裝了此模組,需要使用下面的指令:

      [html] view plaincopy

      1. [root@localhost conf]# /opt/nginx/sbin/nginx  -V   configure arguments: --with-http_stub_status_module -- with-http_gzip_static_module 
      2. --prefix
      3. =/opt/nginx  
      4. 通過/opt/nginx/sbin
      通過/opt/nginx/sbin/gininx HttpGzip模組。
      下面是HttpGzip模組在Nginx配置中的相關屬性設定:

      [html] view plaincopy

        gzip  on;  
      1. gzip_min_length  1k  
      2. gzip_http_version  1.1;  
      3. gzip_comp_level  2;  
      4. lain -javascript text/css application/xml;  
      5. gzip_vary  on;  
      6. gzip用於開啟資料流
      7. gzip_min_length設定允許壓縮的頁面最小位元組數,頁面位元組數從header頭的Content-Length中取得。預設值是0,不管頁面多大都進行壓縮。建議設定成大於1K的位元組數,小於1K可能會越壓越大。
      8. gzip_buffers表示申請4個單位為16K的記憶體作為壓縮結果流緩存,預設值是申請與原始資料大小相同的記憶體空間來儲存gzip壓縮結果。

      gzip_http_version用於設定識別HTTP協定版本,預設為1.1,目前大部分瀏覽器已經支援GZIP解壓,使用預設即可。
      gzip_comp_level用來指定GZIP壓縮比,1 壓縮比最小,處理速度最快;9 壓縮比最大,傳輸速度快,但處理最慢,也比較消耗cpu資源。
      gzip_types用來指定壓縮的類型,無論是否指定,「text/html」類型總是會被壓縮的。
      gzip_vary選項可以讓前端的快取伺服器快取經過GZIP壓縮的頁面,例如用Squid快取經過Nginx壓縮的資料。 4.負載平衡配置
      下面設定負載平衡的伺服器清單。

      [html] view plaincopy

      1. upstream ixdba.net{  
      2. ip_hash;  
      3. ip_hash;  
      4. ip.192. server 192.168.12.134:80  down;  
      5. server 192.168.12.135: 8009  max_fails=3  fail_timeout=20s20s1. 8.12.136:8080;  
      6. }  
      7. upstream是Nginx的HTTP Upstream模組,這個模組透過一個簡單的調度演算法來實現客戶端IP到後端伺服器的負載平衡。在上面的設定中,透過upstream指令指定了一個負載平衡器的名稱ixdba.net。這個名稱可以任意指定,在後面需要的地方直接呼叫即可。
      Nginx的負載平衡模組目前支援4種調度演算法,以下進行分別介紹,其中後兩項屬於第三方的調度方法。
       輪詢(預設)。每個請求依時間順序逐一分配到不同的後端伺服器,如果後端某台伺服器宕機,故障系統會自動剔除,使用戶存取不受影響。
       Weight。指定輪詢權值,Weight值越大,分配到的存取機率越高,主要用於後端每個伺服器效能不均的情況。
       ip_hash。每個請求按訪問IP的hash結果分配,這樣來自同一個IP的訪客固定訪問一個後端伺服器,有效解決了動態網頁存在的session共享問題。
       fair。比上面兩個更聰明的負載平衡演算法。此種演算法可以依據頁面大小和載入時間長短智慧地進行負載平衡,也就是根據後端伺服器的回應時間來分配請求,回應時間短的優先分配。 Nginx本身是不支援fair的,如果需要使用這種調度演算法,必須下載Nginx的upstream_fair模組。
       url_hash。依照存取url的hash結果來分配請求,使每個url定向到同一個後端伺服器,可以進一步提高後端快取伺服器的效率。 Nginx本身是不支援url_hash的,如果需要使用這種調度演算法,必須安裝Nginx 的hash軟體包。
      在HTTP Upstream模組中,可以透過server指令指定後端伺服器的IP位址和端口,同時還可以設定每個後端伺服器在負載平衡調度中的狀態。常用的狀態有:
       down,表示目前的server暫時不參與負載平衡。
       backup,預留的備份機器。當其他所有的非backup機器故障或忙碌的時候,才會要求backup機器,因此這台機器的壓力最輕。
       max_fails,允許請求失敗的次數,預設為1。當超過最大次數時,傳回proxy_next_upstream 模組定義的錯誤。
       fail_timeout,在經歷了max_fails次失敗後,暫停服務的時間。 max_fails可以和fail_timeout一起使用。
      注意 當負載調度演算法為ip_hash時,後端伺服器在負載平衡調度中的狀態不能是weight和backup。
      5.server虛擬主機設定下面介紹對虛擬主機的設定。建議將對虛擬主機進行設定的內容寫入另外一個文件,然後透過include指令包含進來,這樣更方便維護和管理。


      [html] view plaincopy

      server{  
      1. listen          80;  .  www.ixdba.net;  
      2. index index.html index.htm index.jsp;  
      3. root /web/wwwroot/www.ixdba.net  
      4. charset gb2312;  

      5. server標誌定義虛擬主機開始,listen用於指定虛擬主機的服務端口,server_name用來指定IP位址或域名,多個域名之間用空格分開。 Index用來設定存取的預設首頁位址,root指令用來指定虛擬主機的網頁根目錄,這個目錄可以是相對路徑,也可以是絕對路徑。 Charset用於設定網頁的預設編碼格式。
        access_log  logs/www.ixdba.net.access.log  main;
        access_log用來指定此虛擬主機的存取日誌存放路徑,最後的main用於指定存取日誌的輸出格式。

        6.URL匹配配置
         URL位址匹配是進行Nginx設定中最靈活的部分。 location支援正規表示式匹配,也支援條件判斷匹配,使用者可以透過location指令實現Nginx對動、靜態網頁進行過濾處理。
        以下這段設定是透過location指令來對網頁URL進行分析處理,所有副檔名以.gif、.jpg、.jpeg、.png、.bmp、.swf結尾的靜態檔都交給nginx處理,而expires用來指定靜態檔案的過期時間,這裡是30天。

        [html] view plaincopy

        1. location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$  {  🎠   /web/wwwroot/www.ixdba.net;  
        2.                expires 30d;
        3.         }  
        4. 以下這段設定是將upload和html下的所有檔案都交給系統/www.中。
              


        [html] view plaincopy

        location ~ ^/(upload|html)/  {  
        1.   ;  
        2.                expires 30d;  }
        3. 在最後這段設定中,location是對此虛擬主機下動態網頁的過濾處理,也就是將所有以.jsp為後綴的檔案都交給本機的8080埠處理。
        4. [html] view plaincopy

        location ~ .*.jsp$ {  

             xy_pass http://localhost:8080;  

        1. }  
        2. 7. StubStatus模組配置
        3. StubStatus模組能夠取得Nginx自上次啟動以來的工作狀態,此模組非核心模組,需要在Nginx編譯安裝時手動指定才能使用此功能。
        4. 以下指令實指定啟用取得Nginx工作狀態的功能。
        5.       
        [html] view plaincopy
        1.  location /NginxStatus {  
        2.           ;  
        3. access_log              logs/NginxStatus.log;       auth_basic         地 }  
        4.  stub_status設定為「on」表示啟用StubStatus的工作狀態統計功能。 access_log 用來指定StubStatus模組的存取日誌檔。 auth_basic是Nginx的一種認證機制。 auth_basic_user_file用來指定認證的密碼文件,由於Nginx的auth_basic認證採用的是與Apache相容的密碼文件,因此需要用Apache的htpasswd指令來產生密碼文件,例如要新增一個webadmin用戶,可以使用下面方式產生密碼文件:
        5. /usr/local/apache/bin/htpasswd -c  /opt/nginx/conf/htpasswd webadmin
        6. 會得到以下提示訊息:New password:輸入密碼之後,系統會要求再次輸入密碼。確認之後新增用戶成功。
        7.  
        要查看Nginx的運作狀態,可以輸入http://ip/ NginxStatus,然後輸入剛建立的使用者名稱和密碼就可以看到以下資訊:
        Active connections: 1 server accepts handled requests139393939393939 Reading: 0 Writing: 1 Waiting: 0  


        Active connections表示當前活躍的連接數,第三行的三個數字表示Nginx目前總共處理了393411個連接, 成功創建393411次握手, 總共處理了393799個請求。最後一行的Reading表示Nginx讀取到客戶端Header資訊數, Writing表示Nginx回傳給客戶端的Header資訊數,「Waiting」表示Nginx已經處理完,正在等候下一次請求指令時的駐留連線數。
         

        在最後這段設定中,設定了虛擬主機的錯誤訊息回傳頁面,透過error_page指令可以自訂各種錯誤訊息的回頁。在預設情況下,Nginx會在主目錄的html目錄中尋找指定的回傳頁面,特別要注意的是,這些錯誤訊息的回傳頁面大小一定要超過512K,否者會被ie瀏覽器取代為ie預設的錯誤頁面。



        [html] view plaincopy



                error_page  404               error_page   500 502 503 504  /50x.html;  


             

                    root   html;

        1.         }  }  
        2. } 51cto.com/2895551/790611
        3. 以上就介紹了解析Nginx配置文件,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板