天天看點

Nginx配置檔案優化詳解Nginx配置檔案優化詳解

Nginx配置檔案優化詳解

對nginx進行優化是重點也是難點,這裡給出一些常用的優化措施,以及相關參數的所代表的意思。有些參數需要結合公司伺服器進行設定。

全局變量的優化:

#定義Nginx運作的使用者和使用者組user  www  www;
#啟動程序,通常設定成和cpu的數量相等
worker_processes  8;
#為每個程序配置設定cpu。
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
#該指令是當一個nginx程序打開的最多檔案描述符數目,理論值應該是最多打開檔案數(ulimit -n)與nginx程序數相除,
#但是nginx配置設定請求并不是那麼均勻,是以最好與ulimit -n的值保持一緻。
worker_rlimit_nofile  102400;
#全局錯誤日志及PID檔案
error_log  /usr/local/nginx/logs/error.log; 
#錯誤日志定義等級,[ debug | info | notice | warn | error | crit ]加在後面即可。
#定義pid檔案
pid        /usr/local/nginx/nginx.pid;

events {
use   epoll;             	
#epoll是多路複用IO(I/O Multiplexing)中的一種方式,可以大大提高nginx的性能。
worker_connections  10240;	
#單個背景worker process程序的最大并發連結數 (最大連接配接數=連接配接數*程序數)
multi_accept  on; 
#盡可能多的接受請求.
}
#設定http伺服器,利用它的反向代理功能提供負載均衡支援
http {
#設定mime類型,類型由mime.type檔案定義
include       mime.types;
#定義預設的MIME類型;default_type  application/octet-stream;
#定義日志格式
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$request_time"';
#設定通路日志路徑
access_log    /usr/local/nginx/log/nginx/access.log;
sendfile      on;
#sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出檔案,對于普通應用必須設為on
#如果用來進行下載下傳等應用磁盤IO重負載應用,可設定為off,以平衡磁盤與網絡I/O處理速度,降低系統的uptime。
#autoindex  on;  
#開啟目錄清單通路,适合下載下傳伺服器,預設關閉。
tcp_nopush on;   
#防止網絡阻塞,隻有在sendfile被使用時才會激活。
keepalive_timeout  120;
#keepalive逾時時間,用戶端到伺服器端的連接配接持續有效時間,當出現對伺服器的後繼請求時,
#keepalive-timeout功能可避免建立或重建立立連接配接。(節省伺服器資源、CPU、記憶體、網卡)
tcp_nodelay   on; 
#提高資料的實時響應性,僅在将連接配接轉變為長連接配接的時候才被啟用(在upstream發送響應到用戶端時也會啟用)
#開啟gzip壓縮
gzip on;
#設定允許壓縮的頁面最小位元組數。
gzip_min_length  1k;
#設定系統擷取幾個機關的緩存用于存儲gzip的壓縮結果資料流。 
#4 16k代表以16k為機關,按照原始資料大小以16k為機關的4倍申請記憶體。
gzip_buffers     4 16k;
#設定支援http協定的最小壓縮版本。現在大多浏覽器都支援。
gzip_http_version 1.1;
#壓縮級别大小,最大為9,值越小,壓縮後比例越小,CPU處理更快。
#值越大,消耗CPU比較高。
gzip_comp_level  6; 
#支援壓縮的類型。
gzip_types       text/plain application/x-javascript text/css application/xml;
#在http頭檔案中加個“Vary: Accept-Encoding”,給代理伺服器用的,有的浏覽器支援壓縮,有的不支援
#是以避免浪費不支援的也壓縮,是以根據用戶端的HTTP頭來判斷,是否需要壓縮
gzip_vary on;
#對IE6進行壓縮,不過IE6目前已經淘汰。
#gzip_disable "MSIE [1-6]."
client_max_body_size 10m;      
#允許用戶端請求的最大單檔案位元組數
client_body_buffer_size 128k; 
#緩沖區代理緩沖使用者端請求的最大位元組數.
proxy_connect_timeout 90;      
#nginx跟後端伺服器連接配接逾時時間(代理連接配接逾時)
proxy_send_timeout 90;         
#後端伺服器資料回傳時間(代理發送逾時)
proxy_read_timeout 90;         
#連接配接成功後,後端伺服器響應時間(代理接收逾時)
proxy_buffer_size 4k;          
#設定代理伺服器(nginx)儲存使用者頭資訊的緩沖區大小
proxy_buffers 4 32k;           
#proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設定
proxy_busy_buffers_size 64k;   
#高負荷下緩沖大小(proxy_buffers*2)
large_client_header_buffers  4 4k;
#設定讀取用戶端請求超大請求的緩沖最大number(數量)和每塊緩沖的size(容量)。 
#HTTP請求行的長度不能超過一塊緩沖的容量,否則nginx傳回錯誤414 (Request-URI Too Large)到用戶端。 
#每個請求頭的長度也不能超過一塊緩沖的容量,否則nginx傳回錯誤400 (Bad Request)到用戶端。
client_header_buffer_size 4k;
#用戶端請求頭部的緩沖區大小,這個可以根據你的系統分頁大小來設定,一般一個請求的頭部大小不會超過1k
#不過由于一般系統分頁都要大于1k,是以這裡設定為分頁大小。分頁大小可以用指令getconf PAGESIZE取得。
open_file_cache max=102400 inactive=20s;
#這個将為打開檔案指定緩存,預設是沒有啟用的,max指定緩存數量,建議和打開檔案數一緻,inactive是指經過多長時間檔案沒被請求後删除緩存。
open_file_cache_valid 30s;
#這個是指多長時間檢查一次緩存的有效資訊。open_file_cache_min_uses 1;
#open_file_cache指令中的inactive參數時間内檔案的最少使用次數,如果超過這個數字,檔案描述符一直是在緩存中打開的,如上例,如果有一個檔案在inactive
#包含其它配置檔案,如自定義的虛拟主機
include vhosts.conf;
           

虛拟主機配置檔案的優化

upstream backend {        
        #配置後端伺服器的權重。如果在30秒内請求失敗兩次自動剔除
		server   127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
		server   127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
		server   127.0.0.1:8082 weight=1 max_fails=2 fail_timeout=30s;
		server   127.0.0.1:8083 weight=1 max_fails=2 fail_timeout=30s;
	}   
	#虛拟主機配置
	server {		#偵聽80端口
        listen       80;        #定義使用www.abc.com通路
        server_name  www.abc.com;        #設定本虛拟主機的通路日志
        access_log  logs/access.log  main;
			root   /data/webapps/www;  #定義伺服器的預設網站根目錄位置
        index index.php index.html index.htm;   #定義首頁索引檔案的名稱
        #預設請求
        location ~ /{
          root   /data/webapps/www;      #定義伺服器的預設網站根目錄位置
          index index.php index.html index.htm;   #定義首頁索引檔案的名稱
          
          #以下是一些反向代理的配置.
          proxy_next_upstream http_502 http_504 error timeout invalid_header;		 
	  #如果後端的伺服器傳回502、504、執行逾時等錯誤,自動将請求轉發到upstream負載均衡池中的另一台伺服器,實作故障轉移。
          proxy_redirect off;        
           #允許重新定義或者添加發往後端伺服器的請求頭
          proxy_set_header Host $host;          
          #把真實用戶端IP寫入到請求頭X-Real-IP,在NginxBackend輸出$http_x_real_ip擷取到了真實用戶端IP
          #而Nginx Backend的“$remote_addr”輸出為最後一個反向代理的IP;
          proxy_set_header X-Real-IP $remote_addr;          
          #把請求頭中的X-Forwarded-For與$remote_addr用逗号合起來,
          #如果請求頭中沒有X-Forwarded-For則$proxy_add_x_forwarded_for為$remote_addr。
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;          
          #設定代理使用的HTTP協定版本。預設使用的版本是1.0
          proxy_http_version 1.1;
          proxy_set_header Connection "";         
           #設定允許用戶端請求正文的最大長度。
          client_max_body_size    100m;          
          #請求轉向後端定義的均衡子產品,和前面的指定對應。
           proxy_pass  http://backend;   
        # 定義錯誤提示頁面
			error_page   500 502 503 504 /50x.html;  
            location = /50x.html {
            root   html;
        }		#配置Nginx動靜分離,定義的靜态頁面直接從Nginx釋出目錄讀取。
		location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
		{
			root /data/webapps/www;			
			#expires定義使用者浏覽器緩存的時間為3天,如果靜态頁面不常更新,可以設定更長,這樣可以節省帶寬和緩解伺服器的壓力,在浏覽器儲存該類型檔案的天數。
			expires      3d;
		}       
        #PHP腳本請求全部轉發到 FastCGI處理. 使用FastCGI預設配置.
        location ~ \.php$ {
            root /root;
            FastCGI_pass 127.0.0.1:9000;
            FastCGI_index index.php;
            FastCGI_param SCRIPT_FILENAME /data/webapps/www$FastCGI_script_name;
            include FastCGI_params;
        }        
        #設定檢視Nginx狀态的位址
        location /NginxStatus {
            stub_status  on;
        }
     }
}
           

主要涉及開啟的線程數量,綁定CPU,啟動壓縮,緩沖區,連接配接數,逾時時間,如果有代理還涉及到後後端伺服器的互動時間等優化。

轉載于:https://my.oschina.net/xiaominmin/blog/3092602