Nginx運維之四 Http模塊參數配置

案例

推薦使用配置案例如下:

http{
       include       mime.types;
       default_type  application/octet-stream;
        
       server_tokens off;
        
       log_format main '$http_x_real_ip - $remote_addr - $remote_user [$time_local] "$request" '
                               '$status $body_bytes_sent "$http_referer" '
                               '"$http_user_agent" $http_x_forwarded_for'
                               ' "$request_time"';

        server_names_hash_bucket_size 128;
        client_header_buffer_size 128k;
        large_client_header_buffers 4 128k;
        client_max_body_size 100m;

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;

        keepalive_timeout 600s;

        fastcgi_connect_timeout 600s;
        fastcgi_send_timeout 600s;
        fastcgi_read_timeout 600s;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 8 128k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.0;
        gzip_comp_level 2;
        gzip_types       text/plain application/x-javascript text/css application/xml application/json;
        gzip_vary on;

        # 加載sites-enabled下所有的站點配置
        include /usr/local/nginx/sites-enabled/*.conf;

}

核心參數配置

client_body_buffer_size

Syntax: client_body_buffer_size size;
Default: client_body_buffer_size 8k|16k;
Context: http, server, location

設置用於讀取客戶端請求體的緩衝區大小。在請求體大於緩衝區的情況下,將整個主體或僅其部分寫入緩衝。默認情況下,緩衝區大小等於兩個內存頁。這是x86或其他的其他32位平臺上的應爲8K,在X86-64或其他64位平臺上通常爲16K。

client_body_temp_path

Syntax: client_body_temp_path path [level1 [level2 [level3]]];
Default: client_body_temp_path client_body_temp;
Context: http, server, location

定義用於存儲持有客戶端請求主體的混存文件的目錄。可在指定目錄下使用三級子目錄層次結構。例如,在以下配置中

client_body_temp_path /spool/nginx/client_temp 1 2;

一個臨時文件的路徑可能是這樣的:

/spool/nginx/client_temp/7/45/00000123457

client_body_timeout

Syntax: client_body_timeout time;
Default: client_body_timeout 60s;
Context: http, server, location

定義用於讀取客戶端請求體的超時時間。超時僅設置在兩個連續讀取操作之間的時間段內,而不是用於整個請求體的傳輸。如果客戶端在此時間內不發送任何內容,則請求終止(408)(請求超時)錯誤。

client_header_buffer_size

Syntax: client_header_buffer_size size;
Default: client_header_buffer_size 1k;
Context: http, server

設置用於讀取客戶端請求頭的緩衝區大小。對於大多數請求,1K字節的緩衝區就足夠了。但是,如果請求包括長cookie,或者來自WAP客戶端,那麼它可能不適合1K。如果請求行或請求頭字段不適合這個緩衝區,則分配由large_client_header_buffers指令配置的更大的緩衝區。

client_header_timeout

Syntax: client_header_timeout time;
Default: client_header_timeout 60s;
Context: http, server

定義用於讀取客戶端請求標頭的超時。如果客戶端在此時間內不發送整個請求頭,則請求終止(408)(請求超時)錯誤。

client_max_body_size

Syntax: client_max_body_size size;
Default: client_max_body_size 1m;
Context: http, server, location

設置客戶端請求主體的最大允許大小,在“Content-Length”請求頭字段中指定。如果請求中的大小超過了配置值,則將413(請求實體過大)錯誤返回給客戶端。請注意瀏覽器不能正確顯示此錯誤。將大小設置爲0禁用客戶端請求主體大小的檢查。

connection_pool_size

Syntax: connection_pool_size size;
Default: connection_pool_size 256|512;
Context: http, server

允許精確調整每個連接內存分配。該指令對性能影響最小,一般不應使用。默認情況下,32位平臺上的大小等於256字節,64位平臺上的字節爲512字節。

在版本1.9之前,默認值在所有平臺上爲256。

default_type

Syntax: default_type mime-type;
Default: default_type text/plain;
Context: http, server, location

定義響應的默認MIME類型。可以使用類型指令來設置文件擴展名到MIME類型的映射。

keepalive_timeout

Syntax: keepalive_timeout timeout [header_timeout];
Default: keepalive_timeout 75s;
Context: http, server, location

第一個參數設置一個超時時間,在此期間保持活躍的客戶端連接將在服務器端保持打開狀態。設置0將禁用保持活動的客戶端連接。
第二個請求參數將會十返回的response響應頭信息包含“Keep-Alive: timeout=time”字段。2個參數是不一樣的。

Mozilla and Konqueror 支持“Keep-Alive: timeout=time”,MSIE關閉保持活動連接爲60秒。

large_client_header_buffers

Syntax: large_client_header_buffers number size;
Default: large_client_header_buffers 4 8k;
Context: http, server

設置用於讀取大客戶請求頭的緩衝區的最大數量和大小。請求行不能超過一個緩衝區的大小,或者將414(請求URI過大)錯誤返回給客戶端。請求頭字段不能超過一個緩衝區的大小,或者400(壞請求)錯誤返回給客戶端。僅根據需求分配緩衝器。默認情況下,緩衝區大小等於8K字節。如果在請求處理結束之後,連接被轉換爲保持活動狀態,則釋放這些緩衝器。

open_file_cache

Syntax: open_file_cache off;
open_file_cache max=N [inactive=time];
Default: open_file_cache off;
Context: http, server, location

配置緩存的信息:

  • 打開文件描述符,它們的大小和修改時間;
  • 存在的目錄信息;
  • 文件查找錯誤,如 “file not found”, “no read permission”等。

錯誤的緩存應該使用open_file_cache_errors配置。
支持以下參數:

參數 說明
max 設置緩存中的最大元素數;在緩存溢出上刪除最近最少使用的(LRU)元素;
inactive 定義如果在此期間沒有訪問元素,則從緩存中刪除該元素的時間;默認情況下,爲60秒;
off 禁用

例如:

open_file_cache          max=65535 inactive=60s;
open_file_cache_valid    30s;
open_file_cache_min_uses 2;
open_file_cache_errors   on;

open_file_cache_errors

Syntax: open_file_cache_errors on | off;
Default: open_file_cache_errors off;
Context: http, server, location

啓用或禁用open_file_cache緩存文件查找錯誤。

open_file_cache_min_uses

Syntax: open_file_cache_min_uses number;
Default: open_file_cache_min_uses 1;
Context: http, server, location

設置由open_file_cache指令的非活動參數配置的期間內文件訪問的最小數量,該文件描述符在緩存中保持打開是必需的。如果有一個文件在inactive時間內一次沒被使用,它將被移除

open_file_cache_valid

Syntax: open_file_cache_valid time;
Default: open_file_cache_valid 60s;
Context: http, server, location

設置一個時間,在該時間之後open_file_cache文件應該被驗證。

send_lowat

Syntax: send_lowat size;
Default: send_lowat 0;
Context: http, server, location

如果該指令設置爲非零值,則nginx將嘗試通過使用kqueue方法的NOTE_LOWAT標誌或SO_SNDLOWAT套接字選項來最小化客戶端套接字上的發送操作的數量。在這兩種情況下都使用指定的大小。

該指令在Linux、Solaris和Windows上被忽略。

send_timeout

Syntax: send_timeout time;
Default: send_timeout 60s;
Context: http, server, location

這個超時時間是發送響應的超時時間,即Nginx服務器向客戶端發送了數據包,但客戶端一直沒有去接收這個數據包。如果某個連接超過send_timeout定義的超時時間,那麼Nginx將會關閉這個連接。

sendfile

Syntax: sendfile on | off;
Default: sendfile off;
Context: http, server, location, if in location

設置爲on可以啓用Linux上的sendfile系統調用來發送文件,它減少了內核態與用戶態之間的兩次內存複製,這樣就會從磁盤中讀取文件後直接在內核態發送到網卡設備,提高了發送文件的效率。

server_names_hash_bucket_size

Syntax: server_names_hash_bucket_size size;
Default: server_names_hash_bucket_size 32|64|128;
Context: http

設置服務器名稱哈希表的分組大小。默認值取決於處理器的高速緩存行的大小。

server_names_hash_max_size

Syntax: server_names_hash_max_size size;
Default: server_names_hash_max_size 512;
Context: http

設置服務器名稱哈希表的最大大小.

保存服務器名字的hash表是由指令server_names_hash_max_size和server_names_hash_bucket_size所控制的。參數hash bucket size總是等於hash表的大小,並且是一路處理器緩存大小的倍數。在減少了在內存中的存取次數後,使在處理器中加速查找hash表鍵值成爲可能。如果hash bucket size等於一路處理器緩存的大小,那麼在查找鍵的時候,最壞的情況下在內存中查找的次數爲2。第一次是確定存儲單元的地址,第二次是在存儲單元中查找鍵值。因此,如果Nginx給出需要增大hash max size或hash bucket size的提示,那麼首要的是增大前一個參數的大小

Syntax: server_tokens on | off | build | string;
Default: server_tokens on;
Context: http, server, location

啓用或禁用在錯誤頁和“響應頭字段中發佈NGNIX版本。

tcp_nodelay

Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context: http, server, location

對keepalive連接是否使用TCP_NODELAY選項,此外,它在SSL連接上啓用,用於無緩衝的代理,以及用於WebSocket代理。

tcp_nopush

Syntax: tcp_nopush on | off;
Default: tcp_nopush off;
Context: http, server, location

在打開sendfile選項時,確定是否開啓FreeBSD系統上的TCP_NOPUSH或Linux系統上的TCP_CORK功能。開啓此選項允許在Linux和FreeBSD 4.x上將響應頭和正文的開始部分一起發送;一次性發送整個文件。

gzip參數

gzip模塊 是告訴nginx採用gzip壓縮的形式發送數據。這將會減少我們發送的數據量。 Gzip壓縮模塊是Nginx是一個自帶的模塊但是默認狀態是它未啓用的,Gzip壓縮模塊啓用後可以對WEB服務器傳輸給客戶端的圖片,html,js等數據進行壓縮傳輸了,最高可以達到百分八十左右 該模塊可以讀取預先壓縮的gz文件,這樣可以減少每次請求進行gzip壓縮的CPU資源消耗。該模塊啓用後,nginx首先檢查是否存在請求靜態文件的gz結尾的文件,如果有則直接返回該gz文件內容。爲了要兼容不支持gzip的瀏覽器,啓用gzip_static模塊就必須同時保留原始靜態文件和gz文件。這樣的話,在有大量靜態文件的情況下,將會大大增加磁盤空間。我們可以利用nginx的反向代理功能實現只保留gz文件。

gzip

Syntax: gzip on | off;
Default: gzip off;
Context: http, server, location, if in location

禁啓用gzip壓縮響應。

gzip_buffers

Syntax: gzip_buffers number size;
Default: gzip_buffers 32 4k|16 8k;
Context: http, server, location

設置用於壓縮響應的緩衝區的數量和大小。默認情況下,緩衝區大小等於一個內存頁。4K或8K,這取決於一個平臺。

gzip_comp_level

Syntax: gzip_comp_level level;
Default: gzip_comp_level 1;
Context: http, server, location

設置響應的GZIP壓縮級別。可接受的值在1到9的範圍內。

gzip_disable

Syntax: gzip_disable regex …;
Default: —
Context: http, server, location

這個指令出現在0.623版本中。
禁用與“User-Agent”頭字段匹配的任何指定正則表達式的請求響應的GZIP壓縮。

特殊mark“Msie6”(0.7.12)對應於正則表達式“MSIE[4-6]”,但工作速度更快。從版本0.811開始,“MSIE 6;…從這個mark中排除了“Sv1”。

gzip_http_version

Syntax: gzip_http_version 1.0 | 1.1;
Default: gzip_http_version 1.1;
Context: http, server, location

設置壓縮響應所需的請求的最小HTTP版本。

gzip_min_length

Syntax: gzip_min_length length;
Default: gzip_min_length 20;
Context: http, server, location

設置將被壓縮的響應的最小長度。長度僅由響應頭 “Content-Length”字段指定

gzip_proxied

Syntax: gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …;
Default: gzip_proxied off;
**Context: http, server, location

根據請求和響應,啓用或禁用對代理請求的響應的GZIP。判斷請求是否是代理是通過“Via”請求頭字段的存在來確定的。該指令接受多個參數:

參數 說明
off 禁用所有代理請求的壓縮,忽略其他參數;
expired 如果響應頭包含值爲禁用緩存“Expires”字段,則啓用壓縮;
no-cache 如果響應頭包含值爲“no-cache”的“Cache-Control”字段,則啓用壓縮;
no-store 如果響應頭包含值爲“no-store”的“Cache-Control”字段,則啓用壓縮;
private 如果響應頭包含值爲“private”的“Cache-Control”字段,則啓用壓縮;
no_last_modified 如果響應頭不包含“Last-Modified”字段,則啓用壓縮;
no_etag 如果響應頭不包含“ETag”字段,則啓用壓縮;
auth 如果響應頭包含“Authorization”字段,則啓用壓縮;
any 啓用對所有代理請求的壓縮。

gzip_types

Syntax: gzip_types mime-type …;
Default: gzip_types text/html;
Context : http, server, location

除了“text /html”之外,還可以對指定MIME類型的響應進行GZIP。特殊值“*”匹配任何MIME類型(0.8·29)。“text/html”類型的響應總是被壓縮。

gzip_vary

Syntax: gzip_vary on | off;
Default: gzip_vary off;
Context: http, server, location

如果指令gzip、gzip_static或gunzip是啓用的的,則啓用或禁用響應頭包含“Vary:Accept-Encoding”字段。

fastcgi 參數(PHP配置)

CGI全稱是“通用網關接口”(Common Gateway Interface), 它可以讓一個客戶端,從網頁瀏覽器向執行在Web服務器上的程序請求數據。 CGI描述了客戶端和這個程序之間傳輸數據的一種標準。 CGI的一個目的是要獨立於任何語言的,所以CGI可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變量。 如php,perl,tcl等。

FastCGI是Web服務器和處理程序之間通信的一種協議, 是CGI的一種改進方案,FastCGI像是一個常駐(long-live)型的CGI, 它可以一直執行,在請求到達時不會花費時間去fork一個進程來處理(這是CGI最爲人詬病的fork-and-execute模式)。 正是因爲他只是一個通信協議,它還支持分佈式的運算,即 FastCGI 程序可以在網站服務器以外的主機上執行並且接受來自其它網站服務器來的請求。

fastcgi_connect_timeout

Syntax: fastcgi_connect_timeout time;
Default: fastcgi_connect_timeout 60s;
Context: http, server, location

定義用於與FASCGI服務器建立連接的超時。應該注意的是,這個超時時間通常不能超過75秒。

fastcgi_send_timeout

Syntax: fastcgi_send_timeout time;
Default: fastcgi_send_timeout 60s;
Context: http, server, location

設置用於向FASTCGI服務器發送請求的超時時間。超時僅設置在兩個連續寫入操作之間,而不是用於整個請求的傳輸。如果FASCGI服務器在此時間內沒有接收到任何信息,則關閉連接。

fastcgi_read_timeout

Syntax: fastcgi_read_timeout time;
Default: fastcgi_read_timeout 60s;
Context: http, server, location

定義用於從FASCGI服務器讀取響應的超時。超時僅設置在兩個連續讀取操作之間,而不是用於整個響應的傳輸。如果FASCGI服務器在此時間內不發送任何內容,則連接被關閉。

fastcgi_buffer_size

Syntax: fastcgi_buffer_size size;
Default: fastcgi_buffer_size 4k|8k;
Context: http, server, location

設置用於讀取從FASCGI服務器接收的響應的第一部分的緩衝區的大小。這部分通常包含一個小的響應頭。默認情況下,緩衝區大小等於一個內存頁。4K或8K,這取決於平臺。然而,它也可以設置更小。

fastcgi_buffers

Syntax: fastcgi_buffers number size;
Default: fastcgi_buffers 8 4k|8k;
Context: http, server, location
爲單個連接設置用於從FASCGI服務器讀取響應的緩衝區的數量和大小。默認情況下,緩衝區大小等於一個內存頁。4K或8K,這取決於平臺。

fastcgi_busy_buffers_size

Syntax: fastcgi_busy_buffers_size size;
Default: fastcgi_busy_buffers_size 8k|16k;
Context: http, server, location
當啓用對來自FastCGI服務器的響應的緩衝時,限制可能忙於向客戶端發送響應而響應尚未完全讀取的緩衝區的總大小。同時,剩餘的緩衝區可用於讀取響應,如果需要,還可以將響應的一部分緩衝到臨時文件。默認情況下,大小是由fastcgi_buffer_size和fastcgi_buffers指令所設置的兩個緩衝區大小限制的。

fastcgi_temp_file_write_size

Syntax: fastcgi_temp_file_write_size size;
Default: fastcgi_temp_file_write_size 8k|16k;
Context: http, server, location

在啓用從FastCGI服務器到臨時文件的響應緩衝時,限制一次寫入臨時文件的數據的大小。默認情況下,大小是由fastcgi_buffer_size和fastcgi_buffers指令設置的兩個緩衝區限制的。臨時文件的最大大小由fastcgi_max_temp_file_size指令設置。

更多配置參看官方配置說明文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章