1. 程式人生 > >Nginx運維之四 Http模組引數配置

Nginx運維之四 Http模組引數配置

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指令設定。

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