正向代理和反向代理的概念
代理服務(wù)(Proxy),通常也稱為正向代理服務(wù)。
如果把局域網(wǎng)外Internet想象成一個(gè)巨大的資源庫,那么資源就分布到了Internet的各個(gè)點(diǎn)上,局域網(wǎng)內(nèi)的客戶端要訪問這個(gè)庫里的資源就必須統(tǒng)一通過代理服務(wù)器才能對各個(gè)站點(diǎn)進(jìn)行訪問。
局域網(wǎng)內(nèi)的機(jī)器借助代理服務(wù)訪問局域網(wǎng)外的網(wǎng)站, 這主要是為了增加局域網(wǎng)內(nèi)部網(wǎng)絡(luò)的安全性,使得網(wǎng)外的威脅因素不容易影響到網(wǎng)內(nèi),這里代理服務(wù)器起到了一部分防火墻的功能。同時(shí),利用代理服務(wù)器也可以對局域網(wǎng)外的訪問進(jìn)行必要的監(jiān)控和管理。正向代理服務(wù)器不支持外部對內(nèi)部網(wǎng)絡(luò)的訪問請求。
與正向代理服務(wù)相反,如果局域網(wǎng)向Internet提供資源,讓Internet上的其他用戶可以訪問局域網(wǎng)內(nèi)的資源,也可以設(shè)置一個(gè)代理服務(wù)器,它提供的服務(wù)就叫做反向代理(Reverse Proxy)服務(wù)??梢钥吹剑聪虼矸?wù)與代理服務(wù)在功能邏輯上剛好是相反的。
正向代理服務(wù)器與反向代理服務(wù)器的概念很簡單,歸納起來就是,正向代理服務(wù)器用來讓局域網(wǎng)客戶機(jī)接入外網(wǎng)以訪問外網(wǎng)資源,反向代理服務(wù)器用來讓外網(wǎng)的客戶端接入局域網(wǎng)中的站點(diǎn)以訪問站點(diǎn)中的資源。理解這兩個(gè)概念的關(guān)鍵是要明白我們當(dāng)前的角色和目的是什么,在正向代理服務(wù)器中,我們的角色是客戶端,目的是要訪問外網(wǎng)的資源;在反向代理服務(wù)器中,我們的角色是站點(diǎn),目的是把站點(diǎn)的資源發(fā)布出去讓其他客戶端能夠訪問。
知道了這兩個(gè)概念,就可以學(xué)習(xí)如何讓Nginx服務(wù)器來提供代理和反向代理服務(wù)器了。
Nginx的正向代理服務(wù)
Nginx服務(wù)器正向代理服務(wù)的配置的3個(gè)指令
在實(shí)際應(yīng)用中,使用Nginx服務(wù)器代理服務(wù)功能的情況相對少一些,Nginx代理服務(wù)本向也相對簡單,涉及的主要指令不多。這些指令原則上可以出現(xiàn)在Nginx配置文件的http塊、server塊或者location塊中,但一般是在搭建的Nginx服務(wù)器中單獨(dú)配置一個(gè)server塊用來設(shè)置代理服務(wù)。
1.resolver指令
該指令用于指定DNS服務(wù)器的IP地址。DNS服務(wù)器的主要工作是進(jìn)行域名的解析,將域名映射為對應(yīng)的IP地址。該指令的語法結(jié)構(gòu)為:
resolver address ... [valid=
time
];
address,DNS服務(wù)器的IP地址。如果不指定商品號,默認(rèn)使用53端口。
time,設(shè)置數(shù)據(jù)包在網(wǎng)絡(luò)中的有效時(shí)間。出現(xiàn)該指令的主要原因是,在訪問站點(diǎn)時(shí),有很多情況使得數(shù)據(jù)包在一定時(shí)間內(nèi)不能被傳遞到目的地,但是又不能讓該數(shù)據(jù)包無期限地存在,于是就需要設(shè)定一段時(shí)間,當(dāng)數(shù)據(jù)包在這段時(shí)間內(nèi)沒有到達(dá)目的地,就會被丟棄,然后發(fā)送都會接收到一個(gè)消息,并決定是否要重發(fā)數(shù)據(jù)包。
使用該指令的一個(gè)例子如下:
resolver 127.0.0.1 [::1}:5353 valid=30s
在實(shí)際應(yīng)用中,一般不需要設(shè)置這么復(fù)雜,只要將DNS服務(wù)器的IP地址設(shè)置給該指令即可。
從Nginx1.1.7版本開始,該指令支持設(shè)置多個(gè)IP地址,從Nginx1.3.1開發(fā)版本和Nginx1.2.2穩(wěn)定版本開始,該指令支持設(shè)置IPV6地址。
2.resolver_timeount指令
resolver_timeount
time
;
該指令用于設(shè)置DNS服務(wù)器域名解析超時(shí)時(shí)間,語法結(jié)果為:
3.proxy_pass指令
該指令用于設(shè)置代理服務(wù)器的協(xié)議和地址,它不僅僅用于Nginx服務(wù)器的代理服務(wù)器,更主要的是應(yīng)用于反向代理服務(wù),我們馬上就會談及。該指令的語法結(jié)構(gòu)為:
proxy_pass URL;
其中,URL即為設(shè)置的代理服務(wù)器協(xié)議和地址。
在代理服務(wù)配置中,該指令的設(shè)置相對固定,因此在這里就不介紹其他細(xì)節(jié)了,具體內(nèi)容在學(xué)習(xí)Nginx服務(wù)器的反向代理服務(wù)時(shí)再重點(diǎn)闡述。在代理服務(wù)配置中,該指令配置為:
proxy_pass http:
//
$http_host$request_uri;
其中,代理服務(wù)器協(xié)議設(shè)置為HTTP,$http_host和$request_uri兩個(gè)變量是Nginx配置支持的用于自動獲取主機(jī)和URI的變量。配置代理服務(wù)時(shí),一般不要改變該指令的配置。
正向代理服務(wù)使用示例
..
server
{
resolver 8.8.8.8;
listen 82;
location /
{
proxy_pass http:
//
$http_host$request_uri;
}
}
實(shí)現(xiàn)的片段很簡單,設(shè)置DNS服務(wù)器地址為8.8.8.8,使用默認(rèn)的53號端口作為DNS服務(wù)器的服務(wù)端口,代理服務(wù)的監(jiān)聽端口設(shè)置為82端口,Nginx服務(wù)器接收到的所有請求都由第5行的location塊進(jìn)行過濾處理。
Nginx服務(wù)器代理服務(wù)使用的場合不多,從上一節(jié)的配置指令來看,功能也相對簡單。在使用過程中,有一些需要注意的事項(xiàng)在這里說明一下。
首先,我們在上面提到過,設(shè)置Nginx服務(wù)器的代理服務(wù)器,一般是配置到一個(gè)server塊中,注意,在該server塊中,不要出現(xiàn) server_name指令,即不要設(shè)置虛擬主機(jī)的名稱或IP。而resolver指令是必需的,如果沒有該指令,Nginx服務(wù)器無法處理接收到的域名。
其次,Nginx服務(wù)器的代理服務(wù)器不支持正向代理HTTPS站點(diǎn)。
Nginx的反向代理服務(wù)
Nginx服務(wù)器的反向代理服務(wù)是其最常用的重要功能之一,在實(shí)際工作中應(yīng)用廣泛,涉及的配置指令也比較多,各類指令完成的功能也不盡相同。下面按照功能分類向大家介紹配置該服務(wù)需要掌握的指令。由反向代理服務(wù)又可以衍生出多種與此相關(guān)的Nginx服務(wù)器的重要功能,隨后將逐步梳理這些功能,并提供配置實(shí)例供大家參考。
Nginx服務(wù)器提供的反向代理服務(wù)也是比較高效的。它能夠同時(shí)接收的客戶端連接由worker_processes指令和worker_connections指令決定,計(jì)算方法為:worker_processes * worker_connections / 4.
配置Nginx服務(wù)器反向代理用到的指令如果沒有特別說明,原則上可以出現(xiàn)在Nginx配置文件的http塊、server塊或者location塊中,但同正向代理服務(wù)的設(shè)置一樣,一般是在搭建的Nginx服務(wù)器中單獨(dú)配置一個(gè)server塊來設(shè)置反射代理服務(wù)。這些指令主要由ngx_http_proxy_module模塊進(jìn)行解析和處理。該模塊是Nginx服務(wù)器的標(biāo)準(zhǔn)HTTP模塊。
反向代理的基本設(shè)置的27個(gè)指令
學(xué)習(xí)Nginx服務(wù)器的反向代理 服務(wù),要涉及與后端代理服務(wù)器相關(guān)的配置,是客戶端提供正常Web服務(wù)的基礎(chǔ),大家應(yīng)該熟練掌握,尤其是proxy_pass指令,在實(shí)際應(yīng)用過程中需要注意一些配置細(xì)節(jié),需要小心使用。
1.proxy_pass指令
該指令用來設(shè)置被代理服務(wù)器的地址,可以是主機(jī)名稱、IP地址加端口號等形式。其語法結(jié)構(gòu)為:
proxy_pass URL;
其中,URL為要設(shè)置的被代理服務(wù)器的地址,包含傳輸協(xié)議、主機(jī)名稱或IP地址加商品號、URI等要素。傳輸協(xié)議通常是“http”或者“https”。指令同時(shí)還接受以“unix”開始的UNIX-domain套接字路徑。例如:
proxy_pass http:
//www
.myweb.name
/uri
;
proxy_pass http:
//localhost/uri
;
proxy_pass http:
//unix
:
/tmp/backend
.socket:
/uri/
;
如果被代理服務(wù)器是一組服務(wù)器的話,可以使用upstream指令配置后端服務(wù)器組。例如:
#多個(gè)服務(wù)器
...
upstream proxy_svrs
#配置后端服務(wù)器
{
server http:
//192
.168.1.1:8001
/uri/
;
server http:
//192
.168.1.2:8001
/uri/
;
server http:
//192
.168.1.3:8001
/uri/
;
}
server
{
...
listen 80;
server_name www.myweb.name;
location /
{
proxy_pass proxy_svrs;
#使用服務(wù)器組名稱
}
}
這里首先需要提醒大家proxy_pass指令在使用服務(wù)器組名稱時(shí)應(yīng)該注意一個(gè)細(xì)節(jié)。在上例中,在組內(nèi)的各個(gè)服務(wù)器中都指明了傳輸協(xié)議“http://”,而在proxy_pass指令中就不需要指明了。如果 現(xiàn)在將upstream指令的配置改為:
#不指明http
...
upstream proxy_svrs
#配置后端服務(wù)器
{
server 192.168.1.1:8001
/uri/
;
server 192.168.1.2:8001
/uri/
;
server 192.168.1.3:8001
/uri/
;
}
我們就需要在proxy_pass指令中指明傳輸協(xié)議“http://”;
proxy_pass http:
//proxy_svrs
;
在使用該指令的過程中還需要注意,URL中是否包含有URI,Nginx服務(wù)器的處理方式是不同的。如果URL中不包含URI,Nginx服務(wù)器不會改變原地址的URI;但是如果包含了URI,Nginx服務(wù)器將會使用新的URI替代原來的URI。我們舉例來說明。
請看下面的Nginx配置片段:
..
server
{
...
server_name www.myweb.name;
resolver 8.8.8.8;
listen 82;
location
/server/
{
...
proxy_pass http:
//192
.168.1.1;
}
}
如果客戶端使用“http://www.myweb.name/server ”發(fā)起請求,該請求被配置中顯示的location塊進(jìn)行處理,由于proxy_pass指令變量不含有URI,所以轉(zhuǎn)向的地址為“http:///192.168.1.1/server ”;我們再來看下面的Nginx片段:
..
server
{
...
server_name www.myweb.name;
resolver 8.8.8.8;
listen 82;
location
/server/
{
...
proxy_pass http:
//192
.168.1.1
/loc
;
}
}
在該配置實(shí)例中,proxy_pass指令的URI包含了URI“/loc”;如果客戶端仍然使用“http://www.myweb.name/server ”發(fā)起請求,Nginx服務(wù)器將會把地址轉(zhuǎn)向“http://192.168.1.1/loc/ ”;
通過上面的實(shí)例,我們可以總結(jié) 出,在使用proxy_pass指令時(shí),如果不想改變原地址中的URI,就不要在URL變量中配置URI。
明白了上面這兩個(gè)例子的用法,我們來解釋大家經(jīng)常討論的一個(gè)問題,就是proxy_pass指令的URL變量末尾是否加斜杠“/”的問題。
請看這兩個(gè)配置示例:
#配置1 proxy_pass http://192.168.1.1;
#配置2 proxy_pass http://192.168.1.1/;
配置1和配置2的區(qū)別在于,配置2中的proxy_pass指令的URL變量末尾添加了斜杠“/”,這意味著配置2中的proxy_pass指令的URL變量包含了URI“/”,而配置1中的proxy_pass指令的URL變量不包含URI。理解了這一點(diǎn),我們就可以解釋下面的實(shí)例和現(xiàn)象了。大家注意各例子之間的對比。
實(shí)例1:
..
server
{
...
listen 80;
server_name www.myweb.name;
#注意location的uri變量
location /
{
...
#配置1 proxy_pass http://192.168.1.1;
#配置2 proxy_pass http://192.168.1.1/;
}
}
在該配置中,location塊使用“/”作為uri變量的值來匹配不包含URI的請求URL。由于請求URL中不包含URL,因此配置1和配置2的效果是一樣的。比如客戶端的請求URL為“http://www.myweb.name/index.htm”,其將會被實(shí)例1中的location塊匹配成功并進(jìn)行處理。不管使用配置1不是配置2,轉(zhuǎn)向的URL都為:“http://192.168.1.1/index.htm”。
實(shí)例2:
..
server
{
...
listen 80;
server_name www.myweb.name;
#注意location的uri變量
location
/server/
{
...
#配置1 proxy_pass http://192.168.1.1;
#配置2 proxy_pass http://192.168.1.1/;
}
}
在該配置中,location塊使用“/server/”作為uri變量的值來匹配包含的URI“/server/”的請求URL。這時(shí),使用配置1和配置2的轉(zhuǎn)向結(jié)果就不相同了。使用配置1和配置2的轉(zhuǎn)向效果就不相同了。使用配置1時(shí)候,proxy_pass指令中的URL變量不包含URI,Nginx服務(wù)器將不改變原地址的URI,使用配置2的時(shí)候,proxy_pass指令中的URL變量包含URI“/”,Nginx服務(wù)器會將原地址的URI替換為”/”。
比如客戶端的請求URI為“http://www.myweb.name/server/index.htm”將會被實(shí)例2的location塊匹配成功并進(jìn)行處理。使用配置1的時(shí)候,轉(zhuǎn)向的URL為“http://192.168.1.1/server/index.htm”,原地址的URI“、server/”示被改變;使用配置2時(shí),轉(zhuǎn)向的URL為“http://192.168.1.1/index.htm”,可以看到原地址的URI“/server/”被替換為“/”。
大家在應(yīng)用過程中,一定要注意到該指令在配置上的細(xì)節(jié)問題,分清楚URL和URI的區(qū)別與聯(lián)系,并能夠正確使用它們配置出符合需求的Nginx服務(wù)器。
2.proxy_hide_header指令
該指令用于設(shè)置Nginx服務(wù)器在發(fā)送HTTP響應(yīng)時(shí),隱藏一些頭域信息。其語法結(jié)構(gòu)為:
proxy_hide_header field;
其中,field為需要隱藏的頭域。該指令可以在http塊、server塊或者location塊中進(jìn)行配置。
3.proxy_pass_header指令
默認(rèn)情況下,Nginx服務(wù)器在發(fā)送響應(yīng)報(bào)文時(shí),報(bào)文頭中不包含“Date”、“Server”、“X-Accel”等來自被代理服務(wù)器的頭域信息。該指令可以設(shè)置這些頭域信息以被發(fā)送,其語法結(jié)構(gòu)為:
proxy_pass_header field;
4.proxy_pass_request_body指令
該指令用于配置是否將客戶端請求的請求體發(fā)送給代理服務(wù)器,其語法結(jié)構(gòu)為:
proxy_pass_request_body on | off;
默認(rèn)開啟(on),開頭可以在http塊、server塊或者location塊中進(jìn)行配置。
5.proxy_pass_request_headers指令
該指令用于配置是否將客戶端請求的請求頭發(fā)送給代理服務(wù)器,其語法結(jié)構(gòu)為:
proxy_pass_request_headers on | off;
默認(rèn)開啟(on),開頭可以在http塊、server塊或者location塊中進(jìn)行配置。
6.proxy_set_header指令
該指令可以理發(fā)Nginx服務(wù)器接收到的客戶端請求的請求頭信息,然后將新的請求頭發(fā)送給被代理的服務(wù)器,其語法結(jié)構(gòu)為:
proxy_set_header field value;
field,要更新的信息所在的區(qū)域;value,更改的值,支持使用文本、變量或者變量的組合。
默認(rèn)情況下,該指令的設(shè)置為:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
請看一些設(shè)置實(shí)例:
proxy_set_header Host $http_host;
#將目前Host頭域的值填充成客戶端的地址
proxy_set_header Host $$host;
#將當(dāng)前l(fā)ocation塊的server_name指令填充到Host頭域
proxy_set_header Host $$host:$proxy_port;
#listener指令值一起填充到Host頭域.
7.proxy_set_body指令
指該指令可以更改Nginx服務(wù)器接收到的客戶端請求的請求信息,然后將新的請求體發(fā)送給被代理的服務(wù)器。其語法結(jié)構(gòu)為:
proxy_set_body_value;
其中,value為更改的信息,支持使用文本、變量或者變量的組合。
8.proxy_bind指令
官方文檔中對該指令的解釋是,強(qiáng)制將與代理主機(jī)的連接綁定到指定的IP地址。通俗來講就是,在配置多個(gè)基于名稱或者基于IP地址。通俗來講就是,在配置了多個(gè)基于名稱或者基于IP主機(jī)的情況下,如果我們希望代理連接由指定的主機(jī)處理,就可以使用該指令進(jìn)行配置,其語法結(jié)構(gòu)為:
proxy_bind adress;
其中,adress為指定主機(jī)的IP地址。
9.proxy_connect_timeout指令
該指令配置Nginx服務(wù)器與后端被代理服務(wù)器嘗試建立連接的超時(shí)時(shí)間,其語法結(jié)構(gòu)為:
proxy_connect_timeout
time
;
其中,time為設(shè)置的超時(shí)時(shí)間,默認(rèn)60s。
10.proxy_read_timeout指令
該指令配置Nginx服務(wù)器向后端被代理服務(wù)器(組)發(fā)出的read請求后,等待響應(yīng)的超時(shí)時(shí)間,其語法結(jié)構(gòu)為:
proxy_read_timeout
time
;
其中,time為設(shè)置的超時(shí)時(shí)間,默認(rèn)60s。
11.proxy_send_timeout指令
該指令配置Nginx服務(wù)器向后端被代理服務(wù)器(組)發(fā)出的write請求后,等待響應(yīng)的超時(shí)時(shí)間,其語法結(jié)構(gòu)為:
proxy_write_timeount
time
其中,time為設(shè)置的超時(shí)時(shí)間,默認(rèn)60s。
12.proxy_http_version指令
該指令設(shè)置用于Nginx服務(wù)器提供代理服務(wù)的HTTP協(xié)議版本,其語法結(jié)構(gòu)為:
proxy_http_version 1.0 | 1.1;
默認(rèn)版本為1.0版本,1.1版本支持upstream服務(wù)器組設(shè)置的keepalive指令。
13.proxy_method指令
該指令用于設(shè)置Nginx服務(wù)器請求被代理服務(wù)器時(shí)使用的請求方法,一般為POST或者GET。設(shè)置了該指令,客戶端的請求方法將被忽略。其語法結(jié)構(gòu)為:
proxy_method method;
其中,method的值可以設(shè)置為POST或者GET,注意不加引號。
14.proxy_ignore_client_abort指令
該指令用過設(shè)置在客戶端中斷網(wǎng)絡(luò)請求時(shí),Nginx服務(wù)器是否中斷對被代理服務(wù)器的請求,其語法結(jié)構(gòu)為:
proxy_ignore_client_abort on | off
默認(rèn)設(shè)置為off,當(dāng)客戶端中斷網(wǎng)絡(luò)請求時(shí),Nginx服務(wù)器中斷對被代理服務(wù)器的請求。
15.proxy_ignore_header指令
該指令用于設(shè)置一些HTTP響應(yīng)頭的頭域,Nginx服務(wù)器接收到被代理服務(wù)器的響應(yīng)數(shù)據(jù)后,不會處理被設(shè)置的頭域。其語法結(jié)構(gòu)為:
proxy_ignore_header field ...;
其中,field為要設(shè)置的HTTP響應(yīng)頭的頭域,例如“X-Accel-Redirect”、“X-Accel-Expires”、“Cache-Control”、“Expires”或“Set-Cookie”等。
16.proxy_redirect指令
該指令用于修改被代理服務(wù)器返回的響應(yīng)頭中的Location頭域和“Refresh”頭域,與proxy_pass指令配合使用。比如,Nginx服務(wù)器通過proxy_pass指令將客戶端的請求地址重寫為被代理服務(wù)器的地址,那么Nginx服務(wù)器返回客戶端的響應(yīng)頭中“Location”頭域顯示的地址就應(yīng)該和客戶端發(fā)起請求的地址相對應(yīng),而不是代理服務(wù)器直接返回的地址信息,否則就會出問題。該指令解決了這個(gè)問題,可以把代理服務(wù)器返回的地址信息更改為需要的地址信息。其語法結(jié)構(gòu)為:
proxy_redirect redirect replacement
proxy_redirect default;
proxy_redirect off;
redirect,匹配“Location”頭域值的字符串,支持變量的使用和正則表達(dá)式。
replacement,用于替換redirect變量內(nèi)容的字符串,支持變量的使用。
該指令的用法我們通過幾個(gè)配置實(shí)例來解釋。
對于第1個(gè)結(jié)構(gòu),假設(shè)被代理服務(wù)器返回的響應(yīng)頭中的“Location”頭域?yàn)椋?/p>
Location: http:
//localhost
:8081
/proxy/some/uri
該指令設(shè)置為:
proxy_redirect http:
//localhost
:8081
/proxy/
http:
//myweb/fronted/
;
Nginx服務(wù)器會將“Location”頭域信息更改為:
Location:http:
//myweb/frontend//some/uri
;
這樣,客戶端收到的響應(yīng)信息頭部中的“Location”頭域就被更改了。
結(jié)構(gòu) 2使用default,代表使用location塊的uri變量作為replacement,并使用proxy_pass變量作為redirect。請看下面兩段配置,它們的配置效果是等同的。
#配置1
location
/server/
{
proxy_pass http:
//proxyserver/source/
;
proxy_redirect default;
}
#配置2
location
/server/
{
proxy_pass http
//proxyserver/source/
;
proxy_redirect http:
//proxyserver/source/
/server/
;
}
使用結(jié)構(gòu)3可以將當(dāng)前作用域下所有的proxy_redirect指令全部設(shè)置為無效。
17.proxy_intercept_errors指令
該指令用于配置一個(gè)狀態(tài)是否開啟還是關(guān)閉。在開啟狀態(tài)時(shí),如果被代理的服務(wù)器返回的HTTP狀態(tài)碼為400或者大于400,則Nginx服務(wù)器使用自己定義的錯(cuò)誤頁(使用error_page指令);如果是關(guān)閉狀態(tài),Nginx服務(wù)器直接將被代理服務(wù)器返回的HTTP狀態(tài)返回給客戶端。其請求結(jié)構(gòu)為
proxy_intercept_errors on | off
18.proxy_headers_hash_max_size指令
該指令用于配置HTTP報(bào)文頭哈希表的容量,其語法結(jié)構(gòu)為:
proxy_headers_hash_max_size size;
其中,size為HTTP報(bào)文頭哈希表的容量上限,默認(rèn)為512個(gè)字符,即:
proxy_headers_hash_max_size 512;
Nginx服務(wù)器為了能夠快速檢索HTTP報(bào)文頭中的各項(xiàng)信息,比如服務(wù)器名稱、MIME類型、請求頭名等,使用哈希表存儲這些信息。Nginx服務(wù)器在申請存放HTTP報(bào)文頭的空間時(shí),通常以固定大小為單位申請,該大小由proxy_headers_hash_bucket_size指令配置。
在Nignx配置中,不僅能夠配置整個(gè)哈希表的大小上限,對大部分內(nèi)容項(xiàng),也可以配置其大小上限,比如server_names_hash_max_size指令和server_names_hash_bucket_size指令用來設(shè)置服務(wù)器名稱的字符數(shù)長度。
19.proxy_headers_hash_bucket_size指令
該指令用于設(shè)置Nginx服務(wù)器申請存放HTTP報(bào)文頭的哈希表容量的單位大小。該指令的具體作用在上面proxy_headers_bucket_size指令的使用中已經(jīng)說明。其語法結(jié)構(gòu)為:
proxy_headers_hash_bucket_size size;
20.proxy_next_upstream指令
在配置Nginx服務(wù)器反向代理功能時(shí),如果使用upstream指令配置了一組服務(wù)器作為代理 服務(wù)器,服務(wù)器組中各服務(wù)器的訪問規(guī)則遵循upstream指令配置的輪詢規(guī)則 ,同時(shí)可以使用該指令配置在發(fā)生哪些異常情況時(shí),將請求順次交由下一個(gè)組內(nèi)服務(wù)器處理。該指令的語法結(jié)構(gòu)為:
proxy_next_upstream status ...;
其中,status為設(shè)置的服務(wù)器返回狀態(tài),可以是一個(gè)或者多個(gè)。這些狀態(tài)包括:
error,建立連接、向被代理服務(wù)器發(fā)送請求或者讀取響應(yīng)頭時(shí)服務(wù)器發(fā)生連接錯(cuò)誤。
timeout,建立連接、向被代理服務(wù)器發(fā)送請求或者讀取響應(yīng)頭時(shí)服務(wù)器發(fā)生連接超時(shí)。
invalid_header,被代理的服務(wù)器返回的響應(yīng)頭為空或者無效。
http_500|http_502|http_503|http_504|http_404,被代理的服務(wù)器返回500、502、503、504或者404狀態(tài)代碼。
off,無法將請求發(fā)送給被代理的服務(wù)器。
注意
與被代理的服務(wù)器進(jìn)行數(shù)據(jù)傳輸?shù)倪^程中發(fā)送錯(cuò)誤的請求,不包含在該指令支持的狀態(tài)之內(nèi)。
21.proxy_ssl_session_reuse指令
該指令用于配置是否使用基于SSL安全協(xié)議的會話連接(“https://”)被代理的服務(wù)器,其語法結(jié)構(gòu)為:
proxy_ssl_session_reuse on | off