NGINX模組(二)

foreverfriends發表於2017-04-18
【Nginx標準HTTP模組】

一、HTTP核心模組
指令1:alias
語法:alias file-path|directory-path;
預設值:no
使用欄位:location
說明:這個指令指定一個路徑使用某個,注意它可能類似於root,但是document root沒有改變,請求只是使用了別名目錄的檔案。
location /i/ {
alias /spool/w3/images/;
}
上個例子總,請求"/i/top.gif"將返回這個檔案 "/spool/w3/images/top.gif"。當然也可以在別名目錄欄位中使用變數。

【注意】alias指令無法在location欄位中使用正規表示式,除非你同時使用rewrite和root。

指令2:client_body_in_file_only
語法:client_body_in_file_only on|off
預設值:off
使用欄位:http, server, location
說明:這個指令始終儲存一個連線請求實體到一個檔案即使它只有0位元組。
注意:如果這個指令開啟,那麼一個連線請求完成後,所儲存的檔案並不會刪除。這個指令可以用於debug除錯和嵌入式Perl模組中的$r>request_body_file。



指令3:client_body_in_single_buffer
語法:client_body_in_single_buffer
預設值:off
使用欄位:http, server, location
這個指令(0.7.58版本)指定將一個完整的連線請求放入緩衝區,當使用$request_body時推薦使用這個
指令以減少複製操作。
如果無法將一個請求放入單個緩衝區,將會被放入磁碟。


指令4:client_body_buffer_size
語法:client_body_buffer_size the_size
預設值:8k/16k
使用欄位:http, server, location
說明:這個指令可以指定連線請求使用的緩衝區大小。如果連線請求超過快取區指定的值,那麼這些請求或部分請求將嘗試寫入一個臨時檔案。
預設值為兩個記憶體分頁大小值,根據平臺的不同,它可能是8k或16k。


指令5:client_body_temp_path
語法:client_body_temp_path dir-path [ level1 [ level2 [ level3 ]
預設值:client_body_temp
使用欄位:http, server, location
說明:這個指令指定連線請求試圖寫入檔案的目錄路徑。可以指定三級目錄結構,如:
client_body_temp_path /spool/nginx/client_temp 1 2;
那麼它的目錄結構可能是這樣:/spool/nginx/client_temp/7/45/00000123457


指令6:client_body_timeout
語法:client_body_timeout time
預設值:60
使用欄位:http, server, location
說明:這個指令指定一個請求讀取超時時間。
這個選項僅設定與客戶端與伺服器建立連線過程中,如果連線超過這個時間而客戶端沒有任何響應,Nginx將返回一個"Request time out" (408)錯誤。


指令7:client_header_buffer_size
語法:client_header_buffer_size size
預設值:1k
使用欄位:http, server
這個指令指定客戶端請求的http頭部緩衝區大小
絕大多數情況下一個頭部請求的大小不會大於1k
不過如果有來自於wap客戶端的較大的cookie它可能會大於1k,Nginx將分配給它一個更大的緩衝區,
這個值可以在large_client_header_buffers裡面設定。


指令8:client_header_timeout
語法:client_header_timeout time
預設值:60
使用欄位:http, server
說明:這個指令指定客戶端請求的http頭部超時時間。
這個選項僅設定與客戶端與伺服器建立連線並且讀取http頭的過程中,如果連線超過這個時間而客戶端沒有任何響應,
Nginx將返回一個"Request time out" (408)錯誤。



指令9:client_max_body_size
語法:client_max_body_size size
預設值:client_max_body_size 1m
使用欄位:http, server, location
說明:這個指令指定允許客戶端請求的最大的單個檔案位元組數,它出現在請求頭部的Content-Length字段。
如果請求大於指定的值,客戶端將收到一個"Request Entity Too Large" (413)錯誤。需要記住,瀏覽器並不知道怎樣顯示這個錯誤。


指令10:default_type
語法: default_type MIME-type
預設值:default_type text/plain
使用欄位:http, server, location
說明:在基礎MIME檢視沒有指定任何資訊的情況下可以設定預設MIME型別。
參考types。
location = /proxy.pac {
default_type application/x-ns-proxy-autoconfig;
}
location = /wpad.dat {
rewrite . /proxy.pac;
default_type application/x-ns-proxy-autoconfig;
}


指令11:directio
語法:directio [size|off]
預設值:directio off
使用欄位:http, server, location
說明:這個引數指定在讀取檔案大小大於指定值的檔案時使用O_DIRECT(FreeBSD, Linux),F_NOCACHE(Mac OS X)或者呼叫directio()函式(Solaris),當一個請求用到這個引數時會關掉sendfile,通常這個引數用於大檔案。
directio 4m;


指令12:error_page
語法:error_page code [ code... ] [ = | =answer-code ] uri | @named_location
預設值:no
使用欄位:http, server, location, location 中的if欄位
說明:這個引數可以為錯誤程式碼指定相應的錯誤頁面
error_page 404 /404.html;
error_page 502 503 504 /50x.html;
error_page 403 http://example.com/forbidden.html;
error_page 404 = @fetch;
同樣,你也可以修改返回的錯誤程式碼:
error_page 404 =200 /.empty.gif;
如果一個錯誤的響應經過代理或者FastCGI伺服器,這個伺服器將返回不同的響應碼,如200, 302,401或404,那麼可以指定響應碼重定向:
error_page 404 = /404.php;
如果在重定向時不希望改變URI,可以將錯誤頁面重定向到一個命名的location欄位中:
location / (
error_page 404 = @fallback;
)
location @fallback (
proxy_pass http://backend;
)



指令13:if_modified_since
語法:if_modified_since [off|exact|before]
預設值:if_modified_since exact
使用欄位:http, server, location
說明:這個引數(0.7.24)指定了如何將檔案修改的時間與請求頭中的"If-Modified-Since"時間相比較。
·off :不檢查請求頭中的"If-Modified-Since"
·exact:精確匹配
·before:檔案修改時間應小於請求頭中的"If-Modified-Since"時間。


指令14:index
語法:index file [file...]
預設值:index index.html
使用欄位:http, server, location
說明:這個引數哪個(些)檔案將被用於主頁,可以在檔名中使用變數,一個包含絕對路徑的檔案可以把它放到末尾,例:
index index.$geo.html index.0.html /index.html;
如果你想自動生成一個目錄下的檔案列表的主頁,可以用autoindex on指令。


指令15:internal
語法:internal
預設值:no
使用欄位: location
說明:internal指令指定某個location只能被“內部的”請求呼叫,外部的呼叫請求會返回"Not found" (404)“內部的”是指下列型別:
·指令error_page重定向的請求。
·ngx_http_ssi_module模組中使用include virtual指令建立的某些子請求。
·ngx_http_rewrite_module模組中使用rewrite指令修改的請求。
一個防止錯誤頁面被使用者直接訪問的例子:
error_page 404 /404.html;
location /404.html {
internal;
}
Nginx 0.7.x使用一種新的語法指定內部請求:@location 例:
location / {
root /var/www/html;
error_page 404 @40x;
}
location @40x {
root /var/www/errors/40x.html;
}


指令16:keepalive_timeout
語法:keepalive_timeout [ time ] [ time ]
預設值:keepalive_timeout 75
使用欄位:http, server, location
說明:引數的第一個值指定了客戶端與伺服器長連線的超時時間,超過這個時間,伺服器將關閉連線。
引數的第二個值(可選)指定了HTTP頭中Keep-Alive: timeout=time的time值,這個值可以幫助一些
瀏覽器關閉連線,以便伺服器不用重複關閉,如果不指定這個引數,nginx不會在http頭中傳送Keep-Alive資訊。(但這並不是指怎樣將一個連線“Keep-Alive”)引數的這兩個值可以不相同.

下面列出了一些伺服器如何處理包含Keep-Alive的頭:
·MSIE和Opera將Keep-Alive: timeout=N頭忽略。
·MSIE保持一個活動的連線60-65秒,然後傳送一個TCP RST。
·Opera將一直保持一個連線處於活動狀態。
·Mozilla將一個連線在timeout=N的基礎上增加大約1-10秒。
·Konqueror保持一個連線大約N秒。


指令17:keepalive_requests
語法:keepalive_requests n
預設值:keepalive_requests 100
使用欄位:http, server, location
說明:伺服器保持長連線的請求數。


指令18:large_client_header_buffers
語法:large_client_header_buffers number size
預設值:large_client_header_buffers 4 4k/8k
使用欄位:http, server
說明:指令指定客戶端請求的一些比較大的標頭檔案到緩衝區的最大值,如果一個請求的URI大小超過這個值,伺服器將返回一個"Request URI too large" (414),同樣,如果一個請求的頭部欄位大於這個值,伺服器將返回"Bad request" (400)。緩衝區根據需求的不同是分開的。
預設一個緩衝區大小為作業系統中分頁檔案大小,通常是4k或8k,如果一個連線請求將狀態轉換為keep-alive,這個緩衝區將被釋放。



指令19:limit_except
語法:limit_except methods {...}
預設值:no
使用欄位:location
說明:可以比較容易得在location欄位中做一些http動作的限制。
ngx_http_access_module和ngx_http_auth_basic_module模組有很強的訪問控制功能。
limit_except GET {
allow 192.168.1.0/32;
deny all;
}


指令20:limit_rate
語法:limit_rate speed
預設值:no
使用欄位:http, server, location, location中的if欄位
說明:限制將應答包傳送到客戶端的速度,單位為位元組/秒,限制僅對一個連線有效,即如果一個客戶端
開啟2個連線,則它的速度是這個值乘以二。
基於一些不同的狀況,如果要在server欄位來限制一些連線的速度,那麼這個引數並不適用,
不過
你可以選擇設定$limit_rate變數的值來達到目的:
server {
if ($slow) {
set $limit_rate 4k;
}
}


指令21:limit_rate_after
語法:limit_rate_after time
預設值:limit_rate_after 1m
使用欄位:http, server, location, location中的if欄位
這個指令和上面的一起使用:
limit_rate_after 1m;
limit_rate 100k;


指令22:listen
語法:listen address:port [ default [ backlog=num | rcvbuf=size | sndbuf=size | accept_filter=filter | deferred |
bind | ssl ] ]
預設值:listen 80
使用欄位:server
說明:listen指令指定了server{...}欄位中可以被訪問到的ip地址及埠號,可以只指定一個ip,一個埠,或者一個可解析的伺服器名。
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
ipv6地址格式(0.7.36)在一個方括號中指定:
listen [::]:8000;
listen [fe80::1];
當linux(相對於FreeBSD)繫結IPv6[::],那麼它同樣將繫結相應的IPv4地址,如果在一些非ipv6服務器上仍然這樣設定,可能會繫結失敗,當然你可以使用完整的地址來代替[::],也可以使用"defaultipv6only=on" 選項來制定這個listen欄位僅繫結ipv6地址,注意這個選項僅對這行listen生效,而不影響server塊中指定的其他listen欄位。
listen [2a02:750:5::123]:80;
listen [::]:80 default ipv6only=on;
只有ip地址需要指定,埠預設為80。

如果指令有default引數,那麼這個server塊將是一個“地址:埠”對的預設伺服器,這對於你想為那些不匹配server_name指令中的主機名指定預設server塊的基於域名的虛擬主機非常有用,如果沒有指令帶有default引數,那麼預設伺服器將使用第一個出現“IP:埠”對的server塊。
listen允許為系統呼叫的listen(2)和bind(2)傳遞一些其他的引數,這些引數必須用在default引數之後:
backlog=num -- 指定呼叫listen(2)時backlog的值,預設會被-1。
rcvbuf=size -- 為正在監聽的埠指定SO_RCVBUF的值。
sndbuf=size -- 為正在監聽的埠指定SO_SNDBUF的值。
accept_filter=filter -- 為accept-filter指定一個名稱。

·僅用於FreeBSD,它可能有兩個過濾器,dataready與httpready,僅在最終版本的FreeBSD(FreeBSD: 6.0, 5.4-STABLE與4.11-STABLE)上,為他們傳送-HUP訊號可能會改變accept-filter。deferred -- 在linux系統上延遲accept(2)並使用一個輔助的引數: TCP_DEFER_ACCEPT。
bind -- 指出必須使bind(2)分離構建。主要指這裡的“地址:埠”對,實際上如果這些指令描述為監聽同一個埠,但是每個不同的地址和每
條不同的指令均監聽的是這個埠的所有地址,那麼nginx只將bind(2)構建於*:port。這種情況下必須考慮並且確定哪個地址上有連線到達,完成系統呼叫getsockname()。但是如果使用了parameters backlog, rcvbuf,sndbuf, accept_filter或deferred這些引數,那麼將總是將這個“地址:埠”對分離。ssl -- 這個引數(0.7.14)並不關聯listen(2)和bind(2)系統呼叫。
·被指定這個引數的listen將被允許工作在SSL模式,這將允許伺服器同時工作在HTTP和HTTPS兩種協議下,例如:
listen 80;
listen 443 default ssl;
一個使用這些引數的完整例子:
listen 127.0.0.1 default accept_filter=dataready backlog=1024;


指令23:location
語法:location [=|~|~*|^~] /uri/ { ... }
預設值:no
使用欄位:server
說明:這個引數根據URI的不同需求來進行配置,可以使用字串與正規表示式匹配,如果要使用正則表達式,你必須指定下列字首:
1、~* 不匹配大小寫。
2、~ 匹配大小寫。
要確定該指令匹配特定的查詢,程式將首先對字串進行匹配,字串匹配將作為查詢的開始並且區分其大小寫,大部分指定的匹配都會被使用(下文將描述nginx如何完成這一決定)。然後,正規表示式的匹配查詢開始,匹配查詢的第一個正規表示式找到後會停止搜尋,如果沒有找到正則表示式,將使用字串的搜尋結果。有兩種方式修改這種查詢模式,一是使用字首“=”,查詢將被精確的匹配,如果有結果匹配,查
詢將立即停止並且立即處理請求,例如:如果請求“/”非常頻繁,可以使用"location = /"將迅速處理這些請求。
第二種方式為使用字首“^~”這個字首指定目錄只有一個匹配結果的情況下nginx不檢查正則表達式,例如:"location ^~ /images/"將在查詢開始於/images/時停止搜尋,所有的正規表示式不會被檢查。

下面是各種查詢方式的總結:
1、字首“=”表示精確匹配查詢,如果找到,立即停止查詢。
2、指令仍然使用標準字串,如果匹配使用“^~”字首,停止查詢。
3、正規表示式按照他們在配置檔案中定義的順序。
4、如果第三條產生一個匹配,這個匹配將被使用,否則將使用第二條的匹配。
例:
location = / {
# 只匹配 / 的查詢.
[ configuration A ]
}
location / {
# 匹配任何以 / 開始的查詢,但是正規表示式與一些較長的字串將被首先匹配。
[ configuration B ]
}

location ^~ /images/ {
# 匹配任何以 /images/ 開始的查詢並且停止搜尋,不檢查正規表示式。
[ configuration C ]
}

location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以gif, jpg, or jpeg結尾的檔案,但是所有 /images/ 目錄的請求將在Configuration C中處理。
[ configuration D ]
}

各請求的處理如下例:
·/ -> configuration A
·/documents/document.html -> configuration B
·/images/1.gif -> configuration C
·/documents/1.jpg -> configuration D
注意你可以以任何順序定義這4個配置並且匹配結果是相同的,但當使用巢狀的location結構時可能會將配置檔案變的複雜並且產生一些比較意外的結果。

nginx如何決定哪個路徑將被匹配?
大多數使用者並不需要知道nginx內部如何確定使用哪一個路徑,nginx會以很高效的方式為你的URI選擇“最具體的”匹配,對於那些好奇者,可以閱讀一下。所有的路徑字串按照字母順序排列。nginx然後向下檢查所有匹配並且直到找到一個比請求的URI更大的值,這個過程呼叫strcmp()函式,一旦strcmp()函式返回1,則停止搜尋,一旦停止搜尋,最後一個匹配的字串將被使用。
例如我們有以下路徑:
/
/a
/apple
/banana
我們現在請求伺服器的"/az"路徑,nginx將向下搜尋路徑目錄,"/"首先被匹配,但是"/"比"/az"要小,所以繼續向下搜尋,"/a"同樣被匹配,"/a"同樣小於"/az","/apple"並不匹配,"/banana"要大於"/az",所以搜尋停止,最後一個匹配"/a"將被使用。

命名的Lacations
較晚的版本(>0.7.x)支援命名location,這些location欄位以@開頭,以內部location的處理方式進行處理除了error_page或try_files指令
為了保持原始URI而指定的內部重定向。

location / {
try_files @joomla index.html;
}
location @joomla {
rewrite ^(.*)$ /index.php?q=$1 last;
}



指令24:log_not_found
語法:log_not_found [on|off]
預設值:log_not_found on
使用欄位:http, server, location
說明:這個指令指定是否將一些檔案沒有找到的錯誤資訊寫入error_log指定的檔案中。


指令25:log_subrequest
語法:log_subrequest [on|off]
預設值:log_subrequest off
使用欄位:http, server, location
這個指令指定是否將一些經過rewrite rules和/或SSI requests的子請求請求寫入access_log指定的檔案
中。


指令26:msie_padding
語法:msie_padding [on|off]
預設值:msie_padding on
使用欄位:http, server, location
這個指令指定開啟或關閉MSIE瀏覽器的msie_padding功能,當這個功能開啟,nginx將為響應實體分
配最小512位元組,以便響應大於或等於400的狀態程式碼。
這個空間預防MSIE瀏覽器啟用“友好的”HTTP錯誤頁面,所以不在伺服器端隱藏更多的錯誤信息。
注意Chromium/Chrome擁有較好的HTTP錯誤頁面,但是這個特徵將不會傳送某些錯誤資訊。


指令27:msie_refresh
語法: msie_refresh [on|off]
預設值:msie_refresh off
使用欄位:http, server, location
說明:這個指令允許或拒絕為MSIE釋出一個refresh而不是做一次redirect


指令28:open_file_cache
語法:open_file_cache max = N [inactive = time] | off
預設值:open_file_cache off
使用欄位:http, server, location
說明:這個指令指定快取是否啟用,如果啟用,將記錄檔案以下資訊:
·開啟的檔案描述符,大小資訊和修改時間。
·存在的目錄資訊。
·在搜尋檔案過程中的錯誤資訊 -- 沒有這個檔案、無法正確讀取,參考open_file_cache_errors
指令引數:
·max - 指定快取的最大數目,如果快取溢位,最長使用過的檔案(LRU)將被移除。
·inactive - 指定快取檔案被移除的時間,如果在這段時間內檔案沒被下載,預設為60秒。
·off - 禁止快取。
例:
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;


指令29:open_file_cache_errors
語法:open_file_cache_errors on | off
預設值:open_file_cache_errors off
使用欄位:http, server, location
說明:這個指令指定是否在搜尋一個檔案是記錄cache錯誤。



指令30:open_file_cache_min_uses
語法:open_file_cache_min_uses number
預設值:open_file_cache_min_uses 1
使用欄位:http, server, location
這個指令指定了在open_file_cache指令無效的引數中一定的時間範圍內可以使用的最小檔案數,如
果使用更大的值,檔案描述符在cache中總是開啟狀態。


指令31:open_file_cache_valid
語法:open_file_cache_valid time
預設值:open_file_cache_valid 60
使用欄位:http, server, location
這個指令指定了何時需要檢查open_file_cache中快取專案的有效資訊。


指令32:optimize_server_names
語法:optimize_server_names [ on|off ]
預設值:optimize_server_names on
使用欄位:http, server
說明:這個指令指定是否在基於域名的虛擬主機中開啟最優化的主機名檢查。
尤其是檢查影響到使用主機名的重定向,如果開啟最優化,那麼所有基於域名的虛擬主機監聽的
一個“地址:埠對”具有相同的配置,這樣在請求執行的時候並不進行再次檢查,重定向會使
用第一個server name。
如果重定向必須使用主機名並且在客戶端檢查通過,那麼這個引數必須設定為off。
注意:這個引數不建議在nginx 0.7.x版本中使用,請使用server_name_in_redirect。


指令33:port_in_redirect
語法:port_in_redirect [ on|off ]
預設值:port_in_redirect on
使用欄位:http, server, location
說明:這個指令指定是否在讓nginx在重定向操作中對埠進行操作。
如果這個選項開啟,在重定向請求中nginx不會在url中新增埠。


指令34:recursive_error_pages
語法:recursive_error_pages [on|off]
預設值:recursive_error_pages off
使用欄位:http, server, location
說明:recursive_error_pages指定啟用除第一條error_page指令以外其他的error_page。


指令35:resolver
語法:resolver address
預設值:no
使用欄位:http, server, location


指令36:resolver_timeout
語法:resolver_timeout time
預設值:30
使用欄位:http, server, location
說明:解析超時時間。


指令37:root
語法:root path
預設值:root html
使用欄位:http, server, location ,location中的if欄位
說明:請求到達後的檔案根目錄。
下例中:
location /i/ {
root /spool/w3;
}
如果請求"/i/top.gif"檔案,nginx將轉到"/spool/w3/i/top.gif"檔案。你可以在引數中使用變數。
注意:在請求中root會新增這個location到它的值後面,即"/i/top.gif"並不會請求"/spool/w3/top.gif"文
件,如果要實現上述類似於apache alias的功能,可以使用alias指令。


指令38:satisfy_any
語法:satisfy_any [ on|off ]
預設值:satisfy_any off
使用欄位:location
說明:指令可以檢查至少一個成功的密碼效驗,它在NginxHttpAccessModule或NginxHttpAuthBasicModule
這兩個模組中執行。
location / {
satisfy_any on;
allow 192.168.1.0/32;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}


指令39:send_timeout
語法:send_timeout the time
預設值:send_timeout 60
使用欄位:http, server, location
指令指定了傳送給客戶端應答後的超時時間,Timeout是指沒有進入完整established狀態,只完成了
兩次握手,如果超過這個時間客戶端沒有任何響應,nginx將關閉連線。


指令40:sendfile
語法:sendfile [ on|off ]
預設值:sendfile off
使用欄位:http, server, location
說明:是否啟用sendfile()函式。


指令41:server
語法:server {...}
預設值:no
使用欄位:http
說明:server欄位包含虛擬主機的配置。
沒有明確的機制來分開基於域名(請求中的主機頭)和基於IP的虛擬主機。
可以通過listen指令來指定必須連線到這個server塊的所有地址和埠,並且在server_name指令中可
以指定所有的域名。

指令42:server_name
語法:server_name name [... ]
預設值:server_name hostname
使用欄位:server
這個指令有兩個作用:
·將HTTP請求的主機頭與在nginx配置檔案中的server{...}欄位中指定的引數進行匹配,並且找出第
一個匹配結果。這就是如何定義虛擬主機的方法,域名遵循下述優先順序規則:
1、完整匹配的名稱。
2、名稱開始於一個檔案萬用字元:*.example.com。
3、名稱結束於一個檔案萬用字元:www.example.*。
4、使用正規表示式的名稱。
如果沒有匹配的結果,nginx配置檔案將安裝以下優先順序使用[#server server { ... }]欄位:
1、listen指令被標記為default的server欄位。
2、第一個出現listen(或者預設的listen 80)的server欄位。
·如果server_name_in_redirect被設定,這個指令將用於設定HTTP重定向的伺服器名。
例:
server {
server_name example.com www.example.com;
}

第一個名稱為伺服器的基本名稱,預設名稱為機器的hostname。
當然,可以使用檔案萬用字元:
server {
server_name example.com *.example.com www.example.*;
}
上述例子中的前兩個名稱可以合併為一個:
server {
server_name .example.com;
}
同樣可以使用正規表示式。名稱前面加“~”:
server {
server_name www.example.com ~^www\d+\.example\.com$;
}
如果客戶端請求中沒有主機頭或者沒有匹配server_name的主機頭,伺服器基本名稱將被用於一個
HTTP重定向,你可以只使用“*”來強制nginx在HTTP重定向中使用Host頭(注意*不能用於第一
個名稱,不過你可以用一個很**的名稱代替,如“_”)
server {
server_name example.com *;
}
server {
server_name _ *;
}
在nginx0.6.x中有稍許改變:
server {
server_name _;
}
0.7.12版本以後已經可以支援空伺服器名,以處理那些沒有主機頭的請求:
server {
server_name "";
}



指令43:server_name_in_redirect
語法:server_name_in_redirect on|off
預設值:server_name_in_redirect on
使用欄位:http, server, location
如果這個指令開啟,nginx將使用server_name指定的基本伺服器名作為重定向地址,如果關閉,
nginx將使用請求中的主機頭。


指令44:server_names_hash_max_size
語法:server_names_hash_max_size number
預設值:server_names_hash_max_size 512
使用欄位:http
伺服器名稱雜湊表的最大值,更多資訊請參考nginx Optimizations。


指令45:server_names_hash_bucket_size
語法:server_names_hash_bucket_size number
預設值:server_names_hash_bucket_size 32/64/128
使用欄位:http
伺服器名稱雜湊表每個頁框的大小,這個指令的預設值依賴於cpu快取。更多資訊請參考nginx
Optimizations。


指令46:server_tokens
語法:server_tokens on|off
預設值:server_tokens on
使用欄位:http, server, location
是否在錯誤頁面和伺服器頭中輸出nginx版本資訊。


指令47:tcp_nodelay
語法:tcp_nodelay [on|off]
預設值:tcp_nodelay on
使用欄位:http, server, location
這個指令指定是否使用socket的TCP_NODELAY選項,這個選項只對keep-alive連線有效。
點選這裡瞭解更多關於TCP_NODELAY選項的資訊。


指令48:tcp_nopush
語法:tcp_nopush [on|off]
預設值:tcp_nopush off
使用欄位:http, server, location
這個指令指定是否使用socket的TCP_NOPUSH(FreeBSD)或TCP_CORK(linux)選項,這個選項
只在使用sendfile時有效。
設定這個選項的原因是nginx試圖將它的HTTP應答頭封裝到一個包中。


指令49:try_files
語法:try_files file1 [file2 ... filen] fallback
預設值:none
使用欄位:location
這個指令告訴nginx將測試引數中每個檔案的存在,並且URI將使用第一個找到的檔案,如果沒有找
到檔案,將請求名為fallback(可以使任何名稱)的location欄位,fallback是一個必須的引數,它可
以是一個命名的location或者可靠的URI。
例:
location / {
try_files index.html index.htm @fallback;
}
location @fallback {
root /var/www/error;
index index.html;
}


指令50:types
語法:types {...}
使用欄位:http, server, location
這個欄位指定一些擴充套件的檔案對應方式與應答的MIME型別,一個MIME型別可以有一些與其類似的擴充套件。預設使用以下檔案對應方式:
types {
text/html html;
image/gif gif;
image/jpeg jpg;
}
完整的對應檢視檔案為conf/mime.types,並且將被包含。
如果你想讓某些特定的location的處理方式使用MIME型別:application/octet-stream,可以使用以下配置:
location /download/ {
types { }
default_type application/octet-stream;
}

變數

core module 支援一些內建的變數,與apache使用的變數相一致。
首先,一些變數是代表了客戶端請求標題的欄位,如:$http_user_agent, $http_cookie等等。
除此之外,下列是一些其他變數:
$arg_PARAMETER  :這個變數包含在查詢字串時GET請求PARAMETER的值。
$args  :這個變數等於請求行中的引數。
$binary_remote_addr  :二進位制碼形式的客戶端地址。
$body_bytes_sent  :未知。
$content_length  :請求頭中的Content-length欄位。
$content_type  :請求頭中的Content-Type欄位。
$cookie_COOKIE  :cookie COOKIE的值。
$document_root  :當前請求在root指令中指定的值。
$document_uri   :與$uri相同。
$host  :請求中的主機頭欄位,如果請求中的主機頭不可用,則為伺服器處理請求的伺服器名稱。
$is_args  :如果$args設定,值為"?",否則為""。
$limit_rate :這個變數可以限制連線速率。
$query_string     :與$args相同。
$remote_addr  :客戶端的IP地址。
$remote_port  :客戶端的埠。
$remote_user   :已經經過Auth Basic Module驗證的使用者名稱。
$request_filename  :當前連線請求的檔案路徑,由root或alias指令與URI請求生成。
$request_body :這個變數(0.7.58+)包含請求的主要資訊。在使用proxy_pass或fastcgi_pass指令的location中比較有意義。
$request_body_file  :客戶端請求主體資訊的臨時檔名。
$request_completion  :未知。
$request_method   :這個變數是客戶端請求的動作,通常為GET或POST。包括0.8.20及之前的版本中,這個變數總為main request中的動作,如果當前請求是一個子請求,並不使用這個當前請求的動作。
$request_uri  :完整初始化的URI及其一些引數。
$scheme :HTTP方法(如http,https)。按需使用,例:
rewrite ^(.+)$ $scheme://example.com$1 redirect;
$server_addr :伺服器地址,在完成一次系統呼叫後可以確定這個值,如果要繞開系統呼叫,則必須在listen中指定地址並且使用bind引數。
$server_name:伺服器名稱。
$server_port  :請求到達伺服器的埠號。
$server_protocol :請求使用的協議,通常是HTTP/1.0或HTTP/1.1。
$uri :請求中的當前URI,可以不同於初始化的值,例如內部重定向,或者使用index指令中一些包含內部重定向的檔案。

二、HTTP負載均衡模組
三、HTTP訪問控制模組
四、HTTP基本認證模組
五、HTTP目錄清單生成模組
六、瀏覽器相關模組
七、字符集設定模組
八、Empty GIF模組
九、FastCGI模組
十、Geo模組
十一、Gzip模組
十二、HTTP頭處理模組
十三、預設主頁設定模組
十四、HTTP Referer模組
十五、HTTP Limit zone模組
十六、HTTP Limit Requests模組
十七、日誌模組
十八、Map模組
十九、Memcache模組
二十、HTTP代理模組
二十一、URL重寫模組
二十二、SSI模組
二十三、User ID模組

相關文章