Nginx優化整理

SkyeMatlock 8年前發布 | 8K 次閱讀 Web服務器

來自: http://my.oschina.net/undefine/blog/609959


【知識點】  
  • worker_processes 定義了 nginx 對外提供 web 服務時的 worder 進程數。
  • worker_rlimit_nofile 更改 worker 進程的最大打開文件數限制。
  • events 模塊中包含 nginx 中所有和處理連接相關的設置。
  • worker_connections 的值和 worker_rlimit_nofile 值有關系,該值的大小同時受限于系統可以使用的端口數目(~64k)。
  • multi_accept 告訴 nginx 在收到關于新連接的可讀通知后,應盡可能處理掉當前存在的所有來自客戶端的連接。
  • use 設置用于采用哪種 I/O 復用方式。
  • http 模塊控制著 nginx http 處理的所有核心特性。
  • server_tokens 并不會讓 nginx 執行的速度更快,但它可以關閉在錯誤頁面中的 nginx 版本數字,這樣對于安全性是有好處的。
  • sendfile 使能 sendfile() 的使用,在內核態完成相關動作,更高效。
  • tcp_nopush 告訴 nginx 在一個數據包里發送所有 HTTP 包頭,而不是通過 TCP 的 PSH 方式一個一個發送。
  • tcp_nodelay 告訴 nginx 不要在發送小塊數據的時候進行緩存,而是將短小的數據片段即時發送出去。這個選項用于要求頻繁發送小數據片段,而不需要獲得即時回應的應用,因為對這種應用來說,即時投遞的能力才是必須的。
  • access_log 設置 nginx 是否將存儲訪問日志。關閉這個選項可以讓讀取磁盤 I/O 操作更快(這個不太好關閉吧)。
  • error_log 告訴 nginx 只能記錄嚴重的錯誤。
  • keepalive_timeout 給客戶端分配 keep-alive 鏈接超時時間。服務器將在這個超時時間過后關閉鏈接。我們將它設置低些可以讓 ngnix 持續工作的時間更長。
  • client_header_timeout 和 client_body_timeout 設置在一定時間內沒有收到來自客戶端的請求的 header 或 body 部分則認為超時。
  • reset_timeout_connection 告訴 nginx 在發生連接超時后,通過向客戶端發送 RST 直接重置不響應的客戶端連接。這將會釋放那個客戶端所占有的內存空間(使用 RST 方式重置可能會有副作用)。
  • send_timeout 指定 nginx 發送響應的超時時間,即 nginx 向客戶端發送了數據包,但客戶端一致沒有處理該數據包的情況。該超時時間不是指一個應答被完整傳輸的時間,而是用于約束兩次連續的客戶端側讀操作的時間間隔。
  • limit_conn_zone 用于設置共享內存區相關信息。共享內存區中可以保存各種 key 的狀態信息(例如當前連接數據)。用法:limit_conn_zone $binary_remote_addr zone=addr:5m;
  • limit_conn 設置與指定 key 值關聯的連接數的最大值。用法:limit_conn addr 100; 表示每個 ip 地址上僅允許 100 個并發連接。
  • include 只是一個在當前文件中包含另一個文件內容的指令。可以使用通配符 * 。
  • default_type 設置文件使用的默認的 MIME-type 。
  • charset 設置在 header 中攜帶的默認字符集。
  • gzip 設置 nginx 對發送的數據進行 gzip 壓縮。
  • gzip_disable 用于設置針對特定的客戶端不使用 gzip 壓縮。例如 gzip_disable "msie6"; 表示針對 IE6 不做 gzip 。
  • gzip_static 告訴 nginx 在對資源進行 gzip 壓縮前,通過名字查找是否已有預壓縮過的資源。這就允許你可以采用高壓縮比算法事先進行壓縮,而不用在請求時才執行 gzip 壓縮。
  • gzip_proxied allows or disallows compression of a response based on the request/response. We’ll set it to any, so we gzip all requests.
  • gzip_min_length 設置進行 gzip 壓縮時數據大小的字節數下限。例如 gzip_min_length 1000; 表示當請求的大小低于 1000 字節,將不采用 gzip 進行壓縮,因為畢竟 gzip 壓縮會拖慢請求處理進程。
  • gzip_comp_level 設置 gzip 壓縮級別。級別范圍 1~9,其中 9 是最高壓縮級別,但也是最慢的。一般設置中間值 4 比較好。
  • gzip_type 設置針對那些數據類型進行 gzip 壓縮的。例如
  • gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
  • open_file_cache 啟用文件緩存,同時可以指定在該緩存中可以存儲的元素的最大個數,以及淘汰時間。
  • open_file_cache_valid 設置檢驗緩存中元素有效性的頻率。
  • open_file_cache_min_uses 與 open_file_cache 中的 inactive 參數配合使用。如果在 inactive 指定時間內,訪問次數超過 open_file_cache_min_uses 指定的值,則不會淘汰出緩存。

  • open_file_cache_errors 設置是否緩存打開、查找文件錯誤的信息。

user www-data;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 100000;

events {
    worker_connections 2048;
    multi_accept on;
    use epoll;
}

http {
    server_tokens off;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    access_log off;
    error_log /var/log/nginx/error.log crit;

    keepalive_timeout 10;
    client_header_timeout 10;
    client_body_timeout 10;
    reset_timedout_connection on;
    send_timeout 10;

    limit_conn_zone $binary_remote_addr zone=addr:5m;
    limit_conn addr 100;

    include /etc/nginx/mime.types;
    default_type text/html;
    charset UTF-8;

    gzip on;
    gzip_disable "msie6";
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    open_file_cache max=100000 inactive=20s; 
    open_file_cache_valid 30s; 
    open_file_cache_min_uses 2;
    open_file_cache_errors on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}




 本文由用戶 SkyeMatlock 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!