1. 程式人生 > >nginx中的http模組配置

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