Nginx配置詳解

Nginx配置文件主要分成四部分:

main(全局設置)指令將影響其它所有部分的設置;

server(主機設置)指令主要用於指定虛擬主機域名、IP和端口;

upstream(上游服務器設置,主要爲反向代理、負載均衡相關配置)指令用於設置一系列的後端服務器,設置反向代理及後端服務器的負載均衡;

location(URL匹配特定位置後的設置),每部分包含若干個指令。location部分用於匹配網頁位置(比如,根目錄“/”,“/images”,等等)。

他們之間的關係式:server繼承main,location繼承server;upstream既不會繼承指令也不會被繼承。它有自己的特殊指令,不需要在其他地方的應用。


1.1    main全局配置

nginx在運行時與具體業務功能(比如http服務或者email服務代理)無關的一些參數,比如工作進程數,運行的身份等。

o    woker_processes 2
在配置文件的頂級main部分,worker角色的工作進程的個數,master進程是接收並分配請求給worker處理。這個數值簡單一點可以設置爲cpu的核數grep ^processor /proc/cpuinfo | wc -l,也是 auto 值,如果開啓了ssl和gzip更應該設置成與邏輯CPU數量一樣甚至爲2倍,可以減少I/O操作。如果nginx服務器還有其它服務,可以考慮適當減少。

o    worker_cpu_affinity
也是寫在main部分。在高併發情況下,通過設置cpu粘性來降低由於多CPU核切換造成的寄存器等現場重建帶來的性能損耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。

o    worker_connections 2048
寫在events部分。每一個worker進程能併發處理(發起)的最大連接數(包含與客戶端或後端被代理服務器間等所有連接數)。nginx作爲反向代理服務器,計算公式 最大連接數 = worker_processes * worker_connections/4,所以這裏客戶端最大連接數是1024,這個可以增到到8192都沒關係,看情況而定,但不能超過後面的worker_rlimit_nofile。當nginx作爲http服務器時,計算公式裏面是除以2。

o    worker_rlimit_nofile 10240
寫在main部分。默認是沒有設置,可以限制爲操作系統最大的限制65535。

o    use epoll
寫在events部分。在Linux操作系統下,nginx默認使用epoll事件模型,得益於此,nginx在Linux操作系統下效率相當高。同時Nginx在OpenBSD或FreeBSD操作系統上採用類似於epoll的高效事件模型kqueue。在操作系統不支持這些高效模型時才使用select。

1.2    http服務器

與提供http服務相關的一些配置參數。例如:是否使用keepalive啊,是否使用gzip進行壓縮等。

o    sendfile on
開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,減少用戶空間到內核空間的上下文切換。對於普通應用設爲on,如果用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。

o    keepalive_timeout 65 : 長連接超時時間,單位是秒,這個參數很敏感,涉及瀏覽器的種類、後端服務器的超時設置、操作系統的設置,可以另外起一片文章了。長連接請求大量小文件的時候,可以減少重建連接的開銷,但假如有大文件上傳,65s內沒上傳完成會導致失敗。如果設置時間過長,用戶又多,長時間保持連接會佔用大量資源。

o    send_timeout : 用於指定響應客戶端的超時時間。這個超時僅限於兩個連接活動之間的時間,如果超過這個時間,客戶端沒有任何活動,Nginx將會關閉連接。

o    client_max_body_size 10m
允許客戶端請求的最大單文件字節數。如果有上傳較大文件,請設置它的限制值

  • client_body_buffer_size     128k
       
    緩衝區代理緩衝用戶端請求的最大字節數

模塊http_proxy:
這個模塊實現的是nginx作爲反向代理服務器的功能,包括緩存功能(另見文章

  • proxy_connect_timeout     60
        nginx
    跟後端服務器連接超時時間(代理連接超時)

o    proxy_read_timeout 60
連接成功後,與後端服務器兩個成功的響應操作之間超時時間(代理接收超時)

o    proxy_buffer_size 4k
設置代理服務器(nginx)從後端realserver讀取並保存用戶信息的緩衝區大小,默認與proxy_buffers大小相同,其實可以將這個指令值設的小一點

o    proxy_buffers 4 32k
proxy_buffers
緩衝區,nginx針對單個連接緩存來自後端realserver的響應,網頁平均在32k以下的話,這樣設置

o    proxy_busy_buffers_size 64k
高負荷下緩衝大小(proxy_buffers*2)

o    proxy_max_temp_file_size
當 proxy_buffers 放不下後端服務器的響應內容時,會將一部分保存到硬盤的臨時文件中,這個值用來設置最大臨時文件大小,默認1024M,它與 proxy_cache 沒有關係。大於這個值,將從upstream服務器傳回。設置爲0禁用。

o    proxy_temp_file_write_size 64k
當緩存被代理的服務器響應到臨時文件時,這個選項限制每次寫臨時文件的大小。proxy_temp_path(可以在編譯的時候)指定寫到哪那個目錄。

proxy_pass,proxy_redirect見location 部分。

模塊http_gzip:

  • gzip on : 開啓gzip壓縮輸出,減少網絡傳輸。

    • gzip_min_length      1k : 設置允許壓縮的頁面最小字節數,頁面字節數從header頭得content-length中進行獲取。默認值是20。建議設置成大於1k的字節數,小於1k可能會越壓越大。

    • gzip_buffers      4 16k : 設置系統獲取幾個單位的緩存用於存儲gzip的壓縮結果數據流。4 16k代表以16k爲單位,安裝原始數據大小以16k爲單位的4倍申請內存。

    • gzip_http_version      1.0 : 用於識別 http 協議的版本,早期的瀏覽器不支持 Gzip 壓縮,用戶就會看到亂碼,所以爲了支持前期版本加上了這個選項,如果你用了 Nginx 的反向代理並期望也啓用 Gzip 壓縮的話,由於末端通信是 http/1.0,故請設置爲 1.0。

    • gzip_comp_level      6 : gzip壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度最慢(傳輸快但比較消耗cpu)

    • gzip_types :匹配mime類型進行壓縮,無論是否指定,”text/html”類型總是會被壓縮的。

    • gzip_proxied      any : Nginx作爲反向代理的時候啓用,決定開啓或者關閉後端服務器返回的結果是否壓縮,匹配的前提是後端服務器必須要返回包含”Via”的 header頭。

    • gzip_vary      on : 和http頭有關係,會在響應頭加個 Vary: Accept-Encoding ,可以讓前端的緩存服務器緩存經過gzip壓縮的頁面,例如,用Squid緩存經過Nginx壓縮的數據。

1.3    upstream

1.3.1    nginx的upstream目前支持4種方式的分配

1、輪詢(默認)

每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。

2、weight

指定輪詢機率,weight和訪問比率成正比,用於後端服務器性能不均的情況。

2、ip_hash

每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題。

3、fair(第三方)

按後端服務器的響應時間來分配請求,響應時間短的優先分配。

4、url_hash(第三方)

按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,後端服務器爲緩存時比較有效。

 

 

1.3.2    每個設備的狀態設置爲:

1.down 表示單前的server暫時不參與負載

2.weight 默認爲1.weight越大,負載的權重就越大。

3.max_fails :允許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream模塊定義的錯誤

4.fail_timeout:max_fails次失敗後,暫停的時間。

5.backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。

1.4    location

nginx配置location總結及rewrite規則寫法 - http://seanlook.com/2015/05/17/nginx-location-rewrite/

location 匹配規則

~      波浪線表示執行一個正則匹配,區分大小寫

~*    表示執行一個正則匹配,不區分大小寫

^~    ^~表示普通字符匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄

=      進行普通字符精確匹配

 

http服務中,某些特定的URL對應的一系列配置項。

o    root /var/www/html
定義服務器的默認網站根目錄位置。如果locationURL匹配的是子目錄或文件,root沒什麼作用,一般放在server指令裏面或/下。

o    index index.jsp index.html index.htm
定義路徑下默認訪問的文件名,一般跟着root

o    proxy_pass http:/backend
請求轉向backend定義的服務器列表,即反向代理,對應upstream負載均衡器。也可以proxy_pass http://ip:port

o    proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
這四個暫且這樣設,如果深究的話,每一個都涉及到很複雜的內容,也將通過另一篇文章來解讀。

nginx通用配置文件

參照附件:http://siliang.blog.51cto.com/5882215/1918481

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章