深刻Nginx之《經常使用參數配置技巧》

常見參配置實戰技巧css

    下面會講解實戰中應該怎麼配置更爲合理。html


 

1.usernode

    默認是nobody,若是使用nobody,Nginx在運行過程當中會出現不少操做沒有權限,好比寫硬盤。通常都是用低於root級別的用戶,好比www,而且能夠在linux下設置www禁止ssh登陸服務器,提升安全性;linux

 

2.worker_processesnginx

    表明Nginx worker的進程數,通常狀況下建議和機器的核數相同,也能夠配置 worker_processes auto ; (Nginx1.2.5版本添加的) 自動根據cpu核數進行進程啓動;後端

    可是實際應用中,服務器不必定只跑了Nginx,須要考慮機器資源會被分配到哪些服務上,避免進程啓動過多,和其餘服務競爭cpu,致使過多上下文切換;瀏覽器

 

3.worker_cpu_affinity auto緩存

Nginx 1.9.10添加的功能,表示能夠根據服務器的核數自動配cpu親緣性,提高Nginx的性能;安全

 

四、error_log & access_log服務器

關於日誌記錄的,error_log 配置爲error級別, 減小沒必要要的日誌記錄, 若是是測試環境能夠開啓info級別。日誌記錄須要考慮硬盤的獨立性,不要使用linux的根分區,避免大量的io影響Linux服務器吞吐能力。單獨掛載一個磁盤,獨立使用io;

另外硬盤的使用壽命須要注意,關注message的日誌,按期檢查硬盤(Nginx記錄日誌是異步處理,而且不會由於硬盤的問題,致使請求異常,可是會影響日誌的記錄) ;

 

5.worker_priority

    配置Nginx在linux服務器上資源使用的優先級,做爲反向代理服務,應該擁有極高的優先級,建議配置到-10;

 

6.gzip_comp_level

    壓縮等級,等級最高爲9,等級越高壓縮後的文件越小,可是消耗的cpu也會更多,通過測試,壓縮等級7 和 9 的文件大小相比,其實只有細微的差異,用5-7的等級足矣;

 

7.upstream塊

    配置上游服務器,能夠結合 proxy_next_upstream 等指令作大量的優化,我會在下面的章節單獨說明;

 

8.error_page

    錯誤重定向,能夠捕獲上游服務器錯誤的狀態碼後,將請求重定向到其它地方,好比提供友好頁面,關於error_page的更強大的使用方式。

 

9.location & root

    經過root路徑能夠讀取靜態文件,在1.7.11之前的版本,Nginx讀取硬盤的文件,都是阻塞型操做,後面引入了線程池,使得讀取硬盤提供了非阻塞的操做,極大的提高了硬盤的io,也提高了proxy_cache的能力。

Nginx的常見配置在使用中都有着不一樣的變化,那麼對於更爲複雜的配置來講,其配置就顯得更爲精妙了,因此熟悉Nginx的官方wiki是發揮它巨大做用的基礎。

 

常見配置註解


 

user  www www;   

    #定義Nginx運行的用戶和用戶組

worker_processes  2;    

    #Nginx進程數

worker_cpu_affinity auto;    

    #配置Nginx進程cpu親源性

error_log  /var/log/error_log  info;    

    #全局錯誤日誌定義類型 ,默認是error

worker_rlimit_nofile 65535;    

    #一個Nginx進程打開的最多文件描述符數量

pid /var/run/nginx.pid;    

    #進程文件

worker_priority -10;    

    #linnx系統下的資源使用的優先級

worker_rlimit_nofile  65535;    

    #worker進程的最大打開文件數限制

worker_shutdown_timeout  30;    

    #30s內Nginx沒法平滑退出,就強行關閉進程

events {

  worker_connections  10000;    

    #單個進程最大鏈接數(整個Nginx最大鏈接數=鏈接數*進程數)

  use epoll;    

    #epoll linux2.6+內核高性能的網絡io, 若是跑在FreeBSD上面,就用kqueue模型。

}

 

http {

    include       conf/mime.types;    

    #文件擴展名與文件類型映射表

    default_type  application/octet-stream;     

    #默認文件類型

    log_format main     '$remote_addr - $remote_user [$time_local] '

                         '"$request" $status $bytes_sent '

                         '"$http_referer" "$http_user_agent" '

                         ‘"$http_cookie"';   

    #定義日誌格式

    client_header_buffer_size    1k;    

    #設置用戶請求頭所使用的buffer大小

    large_client_header_buffers  4 4k;    

    #當默認的緩衝不夠用時就會使用此參數。

    server_names_hash_bucket_size 128;    

    #服務器名字的hash表大小

    client_header_buffer_size 32k;    

    #上傳文件大小限制

    gzip on;    

    #開啓gzip

    gzip _comp_level 6;    

    #壓縮等級

    gzip _min_length  1100;    

    #設置容許壓縮的頁面最小字節數

    gzip _buffers     4 8k;    

    #設置系統獲取幾個單位的緩存用於存儲gzIP的壓縮結果數據流。4 8k 表明以8k爲單位,按照原始數據大小以8k爲單位的4倍申請內存。

    gzip _types       text/plain text/css;    

    #匹配MIME類型進行壓縮

    output_buffers   2 32k;    

    #設置用於從磁盤讀取響應的緩衝區的數量和大小。 此設置爲:按照原始數據大小以32K爲單位的2倍大小申請內存空間。

    sendfile         on;    

    #啓用sendfile()函數

    tcp_nopush       on;    

    #防止網絡阻塞,須要sendfile開啓

    tcp_nodelay      on;    

    #防止網絡阻塞,須要sendfile開啓

    keepalive_timeout 90s;    

    #長鏈接超時時間,單位是秒

    upstream backend {

    server 192.168.1.12:8081 weight=3;

    server 192.168.1.13:8081 weight=2;

    #upstream塊,weight是權重,權重越高,請求的比例越高。 

    server {

        listen       80;     

         #http監聽端口

        server_name  your.example.com;  

        #域名

        access_log   /var/log/nginx.access_log  main;     

        #訪問日誌記錄

        charset  koi8-r;    

        #默認編碼

        location / {

            proxy_pass         http://backend ;

            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;       }    

        #後端的應用服務器經過X-Forwarded-For獲取用戶的真實IP

        error_page  404  /404.html;    

        #對於後端應用服務器拋出的錯誤404 進行頁面重定向

        location /404.html {

            root  /spool/www;

        } 

        # 匹配URL爲jpg,jpeg,gif結尾的,直接去系統文件讀取

        location ~* \.(jpg|jpeg|gif)$ {

            root         /spool/www;

            expires      30d;    

        #瀏覽器緩存的時間

        }

    }

相關文章
相關標籤/搜索