1. 程式人生 > >nginx高性能WEB服務器系列之四配置文件詳解

nginx高性能WEB服務器系列之四配置文件詳解

pro web服務 發送 應該 避免 如果 upstream index 靜態頁

註:原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。

nginx的強大之處不必要我細說,當初第一次接觸nginx的時候就發現了它的強大之處,並且自我覺得非常有必要出一篇記錄nginx的各個功能及坑點。

歡迎大家對nginx感興趣的朋友們來一起學習與及時提出錯誤及誤點。有問題的可以在評論區@我。

一:nginx配置文件詳解

nginx配置文件不算多,但是幾乎每一層都有它精確的意思,所以要學習好nginx,必須先了解它的配置文件,接下來就解釋一些nginx常用的一些配置文件的含義

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

#啟動進程,通常設置成和cpu的數量相等 worker_processes
8;
#為每個進程分配cpu,上例中將8個進程分配到8個cpu,當然可以寫多個,或者將一個進程分配到多個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 /usr/local/nginx/nginx.pid; #一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值ulimit -n)與nginx進程數相除,但是nginx分配請求並不均勻. #所以建議與ulimit -n的值保持一致。 worker_rlimit_nofile 65535; #工作模式及連接數上限 events { use epoll; #epoll是多路復用IO(I
/O Multiplexing)中的一種方式,但是僅用於linux2.6以上內核,可以大大提高nginx的性能 worker_connections 102400; #單個後臺worker process進程的最大並發鏈接數 (最大連接數=連接數*進程數) multi_accept on; #盡可能多的接受請求 } #設定http服務器,利用它的反向代理功能提供負載均衡支持 http { #設定mime類型,類型由mime.type文件定義 include mime.types; default_type application/octet-stream; #設定日誌格式 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; #防止網絡阻塞 keepalive_timeout 60; #keepalive超時時間,客戶端到服務器端的連接持續有效時間,當出現對服務器的後,繼請求時,keepalive-timeout功能可避免建立或重新建立連接。 tcp_nodelay on; #提高數據的實時響應性 #開啟gzip壓縮 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; #壓縮級別大小,最大為9,值越小,壓縮後比例越小,CPU處理更快。 #值越大,消耗CPU比較高。 gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; 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; 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;

以上為簡單的nginx配置詳解,根據項目需求來配置,並非所有都需要,視情況而定。

二:nginx配置文件詳解(這裏主要為了達到某個項目需求及作用而配置)

#這裏為後端服務器wugk應用集群配置,根據後端實際情況修改即可,test為負載均衡名稱,可以任意指定
    #但必須跟vhosts.conf虛擬主機的pass段一致,否則不能轉發後端的請求。weight配置權重,在fail_timeout內檢查max_fails次數,失敗則剔除均衡。(即可理解為負載均衡的安全檢查,後面還會演示另種方法)
    upstream test {
        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 {
        #偵聽80端口
        listen       80;
        #定義使用www.maxiaotian.com訪問,前提為此域名必須解析了此主機IP。
        server_name  www.maxiaotian.com;
        #設定本虛擬主機的訪問日誌
        access_log  logs/access.log  main;
            root   /data/webapps/maxt;  #定義服務器的默認網站根目錄位置
        index index.php index.html index.htm;   #定義首頁索引文件的名稱
        #默認請求
        location ~ /{
          root   /data/www/maxt;      #定義服務器的默認網站根目錄位置
          index index.php index.html index.htm;   #定義首頁索引文件的名稱
          #以下是一些反向代理的配置.
          proxy_next_upstream http_502 http_504 error timeout invalid_header;
          #如果後端的服務器返回502、504、執行超時等錯誤,自動將請求轉發到upstream負載均衡池中的另一臺服務器,實現故障轉移。
          proxy_redirect off;
          #後端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_pass  http://tdt_wugk;     #請求轉向後端定義的均衡模塊
       }
       
        # 定義錯誤提示頁面
            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/www/maxt;
            #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/www/wugk$fastcgi_script_name;
            include fastcgi_params;
        }
        #設定查看Nginx狀態的地址
        location /NginxStatus {
            stub_status  on;
        }
     }
}

大概的配置文件解釋就到此了,對於一些初期接觸nginx的同學肯定會覺得蒙蒙的,其實很正常,很多配置可能需要結合實踐項目去認識會更快,更能理解。所以後面nginx系列文檔中,我也會編寫一些結合項目實踐的一些配置,希望能幫到大家!

nginx高性能WEB服務器系列之四配置文件詳解