nginx中的http模組配置
一、簡介
本文將介紹http各個模組及常用的路徑配置。
二、http模組總覽
http模組從外到內有http塊、server塊、location塊,同時各個模組有各自的屬性元素。
http塊:即一個http處理模組,可進行http的相關引數配置,內可以包含多個server塊;
server塊:即是一個虛擬主機,需配置域名和埠,也只處理對應主機域名的http請求,內可包含多個location塊;
location塊:對應具體的路徑請求(http請求)。
總體示意圖如下:
http{ server{ location { } location { } } server{ location { } location { } } }
三、http塊常用配置
1、upstream
定義上游伺服器叢集,在反向代理中proxy_pass使用,用於負載均衡。如:
upstream backend{ ip_hash; server 192.168.0.1; server 192.168.0.2:8080; server 192.168.0.3 max_fails=5 fail_timeout=30s; server 192.168.0.4 down; } server { location /{ proxy_pass http://backend; } }
當希望某一請求固定到指定上游伺服器上,可以在upstream塊中加ip_hash關鍵字。
注意upstream塊內的server使用:
a)後可以是域名、ip地址或加埠;
b)當某server不使用時,則在後加 down 關鍵字;
c)若希望某一伺服器處理更多請求,則可以在後加權重 weight ,如weight=10,預設值為1(不能與ip_hash同時使用);
d)配置在指定時間內失敗多少次,上器伺服器不可用,可用配置fail_timeout(失敗時間,預設為10秒),max_fails(失敗次數,
預設為1,若為0,則不檢查失敗)。
四、server塊常用配置
1、listen
監聽的埠,後可加ip地址、埠或主機名,如
listen 8080
listen 127.0.0.1:8080
listen *:8080
注意:不加埠時,預設監聽80埠。
2、server_name 主機名稱
server_name用於與http請求header頭部的Host匹配。
注意:後可跟多個主機名,主機名也可使用通匹符,如*.test.com。
五、location塊常用配置
1、路徑配置(符號有:=、~、~*、^~、@,模式為:location 符號 /uri),具體使用如下:
=:表示完全匹配,不存在正則表示,如 location = /uri {.....}
~:表示匹配時,大小寫敏感的,如 location ~ /uri {.....}
~*:表示匹配時,大小寫不敏感,即忽略大小寫問題,如 location ~* /uri {......},這時/uri,/Uri, /URI都可以匹配上。
^~:表示匹配時,只需開頭部分匹配上即可,如 location ^~ /uri/ {....} ,這時只要以/uri/開頭的地址都會匹配上。
@:表示nginx內部的重定向,不直接處理使用者的請求,如 location @error {.....} , 這時可以另一個location內部,
重定向到@error路徑,如 location ~ /test {error_page 404 @error}。
2、限制請求的方法 limit_except method {......}
limit_except後跟不允許的方法,括號為可限制ip,同時注意請求方法的包含原則,如限制了GET方法,則同時也就限制
了HEAD方法。如
limit_except GET {
allow 192.168.0.1/32;
deny all;
}
即禁止除192.168.0.1地址外的,方法為GET或HEAD的請求
3、配置轉發的方法proxy_method,如:
location ~ /test{ proxy_method=POST; }
表示不管請求是什麼方法,轉發後的方法為POST。
4、配置轉發路徑proxy_pass,如:
location ~ /test{ proxy_pass https://192.168.0.5:8080; } location ~ /test1{ proxy_pass https://backend; }
注意:轉發時,預設不會帶上原求的Host頭部,若想帶上,則需加上配置 proxy_set_header Host $host;
六、http塊、server塊都可使用的配置
1、配置請求頭header(包括請求行和請求頭部)的記憶體buffer大小 client_header_buffer_size
預設為client_header_buffer_size 1k ,即1k大小。當超過時,由下面的超大請求記憶體 large_client_header_buffers
來決定是否拋錯。
2、配置超大請求header的記憶體buffer大小 large_client_header_buffers
後跟buffer的個數和每個buffer的大小,預設為large_client_header_buffers 4 8k,即4個buffer,每個buffer為8k。
當請求行(即是協議+方法+地址)大於單個buffer大小時,則返回414(requst uri too large),
當請求中的單個header大於了單個buffer大小,則返回400(bad request)。
請求行+請求頭部 超過 buffer個數*單個buffer大小也會出錯的。
七、http塊、server塊、location塊都可使用的配置
1、限制請求體大小 client_max_body_size ,如
client_max_body_size 10m; 即限制請求體最大為10m,預設值為1m。超過則傳送403( reques entity to large)響應。
2、配置首頁 index
當路徑為/時,通常會返回首頁,預設為index.html頁面,如:
location / { root path; index /index1.html /index2.html /index3.html; }
注意:index後可跟多個地址,返回時,則返回第一個可訪問的首頁。示例中,則返回地址為path/index1.html。
3、根據http返回碼重定向頁面 error_page
error_page後跟返回碼和重定向地址,如:
server { error_page 404 /404.html; error_page 400 = 200 /404.html; error_page 403 = /404.html; error_page 405 406 /404.html; location = /404.html { proxy_pass http://192.168.0.1/404.html; } }
注意:
a)error_page可跟多個返回碼;
b)雖然重定向了,但返回碼到客戶端是不變的。不過,可以通過=來改,=後接新的返回碼,
後也可以不跟返回碼,讓重定向後的請求決定。
4、讀取請求頭部超時時間 client_header_timeout (預設單位為秒)
預設為client_header_timeout 60,即讀取頭部超時時間為60秒,超時由返回408(request time out)。
5、讀取請求體超時時間 client_body_timeout (預設單位為秒)
預設為client_body_timeout 60,即讀取請求體超時時間為60秒。
6、傳送響應超時時間 send_timeout (預設單位為秒)
預設為send_timeout 60,即傳送超時時間為60秒。
7、長連線時間 keepalive_timeout (預設單位為秒)
預設為 keepalive_timeout 75
8、一個長連線的最大請求數 keepalive_requests
預設為 keepalive_requests 100 ,即一個連線上最多可傳送100次請求
9、設定DNS解析地址 resolver,後地址,可多個,如:
resolver 192.168.0.1 192.168.0.2