nginx配置文件優化

nginx配置優化

 
 

#定義Nginx運行的用戶和用戶組user  www  www;  javascript


#啓動工做進程,一般設置成和cpu的數量相等
worker_processes  8;   最多開啓8個,8個以上性能就不會再提高了。php


#爲每一個工做進程分配cpu。
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;css

關於cpu的設置,能夠查看這個連接:http://blog.csdn.net/u011957758/article/details/50959823html


#該指令是當一個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 ]加在後面便可。java


#定義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"';node

$request_time的單位是秒。nginx

實戰:web

103.233.128.154 - - [10/Nov/2017:11:03:05 +0800] "GET /data/questionnaire?callback=jQuery111105610104849438594_1510282984659&pid=cnu&u=b&mode=c&_id=5a0516c71b0aebcecc985469&_=1510282984660 HTTP/1.1" 200 187 "http://csproduct.cmr.net.cn/nwb/webdata/pxbz/m/dcwjwt?pid=cnu&productId=028&paperid=5a0516c71b0aebcecc985469&firstBlockId=59bb8ca238d2116827ea9cdb&firstIndex=2&blockId=5a0516c7e7c4e1b8a0058ad2&secIndex=11&status=1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0"  "0.014"後端

103.233.128.154   $remote_addr   遠程客戶端地址

-        -   

-   $remote_user          遠程客戶端用戶名稱

[10/Nov/2017:11:03:05 +0800]     [$time_local]    訪問時間和時區

GET /data/questionnaire?callback=jQuery111105610104849438594_1510282984659&pid=cnu&u=b&mode=c&_id=5a0516c71b0aebcecc985469&_=1510282984660 HTTP/1.1     $request    請求信息

200    $status    狀態碼

187    $body_bytes_sent   字節爲單位    發送字節大小

http://csproduct.cmr.net.cn/nwb/webdata/pxbz/m/dcwjwt?pid=cnu&productId=028&paperid=5a0516c71b0aebcecc985469&firstBlockId=59bb8ca238d2116827ea9cdb&firstIndex=2&blockId=5a0516c7e7c4e1b8a0058ad2&secIndex=11&status=1 $http_referer          從哪一個頁面訪問過來的,能夠防盜鏈在這裏設置

Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0      $http_user_agent   用戶所使用的瀏覽器信息.

$request_time   請求時間單位爲秒

$http_x_fordwarded_for   此nginx當作web的時候,當前端有代理服務器時,記錄客戶端的地址,前提是代理服務器上設置了proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for

 

 

#設定訪問日誌路徑
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;         
      #若是後端的服務器返回50二、50四、執行超時等錯誤,自動將請求轉發到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,啓動壓縮,若是有代理還涉及到後後端服務器的交互時間等優化

相關文章
相關標籤/搜索