亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    Nginx的正向代理與反向代理詳解

    正向代理和反向代理的概念

    代理服務(wù)(Proxy),通常也稱為正向代理服務(wù)。

    如果把局域網(wǎng)外Internet想象成一個(gè)巨大的資源庫(kù),那么資源就分布到了Internet的各個(gè)點(diǎn)上,局域網(wǎng)內(nèi)的客戶端要訪問(wèn)這個(gè)庫(kù)里的資源就必須統(tǒng)一通過(guò)代理服務(wù)器才能對(duì)各個(gè)站點(diǎn)進(jìn)行訪問(wèn)。

    局域網(wǎng)內(nèi)的機(jī)器借助代理服務(wù)訪問(wèn)局域網(wǎng)外的網(wǎng)站, 這主要是為了增加局域網(wǎng)內(nèi)部網(wǎng)絡(luò)的安全性,使得網(wǎng)外的威脅因素不容易影響到網(wǎng)內(nèi),這里代理服務(wù)器起到了一部分防火墻的功能。同時(shí),利用代理服務(wù)器也可以對(duì)局域網(wǎng)外的訪問(wèn)進(jìn)行必要的監(jiān)控和管理。正向代理服務(wù)器不支持外部對(duì)內(nèi)部網(wǎng)絡(luò)的訪問(wèn)請(qǐng)求。

    與正向代理服務(wù)相反,如果局域網(wǎng)向Internet提供資源,讓Internet上的其他用戶可以訪問(wèn)局域網(wǎng)內(nèi)的資源,也可以設(shè)置一個(gè)代理服務(wù)器,它提供的服務(wù)就叫做反向代理(Reverse Proxy)服務(wù)??梢钥吹?,反向代理服務(wù)與代理服務(wù)在功能邏輯上剛好是相反的。

    正向代理服務(wù)器與反向代理服務(wù)器的概念很簡(jiǎn)單,歸納起來(lái)就是,正向代理服務(wù)器用來(lái)讓局域網(wǎng)客戶機(jī)接入外網(wǎng)以訪問(wèn)外網(wǎng)資源,反向代理服務(wù)器用來(lái)讓外網(wǎng)的客戶端接入局域網(wǎng)中的站點(diǎn)以訪問(wèn)站點(diǎn)中的資源。理解這兩個(gè)概念的關(guān)鍵是要明白我們當(dāng)前的角色和目的是什么,在正向代理服務(wù)器中,我們的角色是客戶端,目的是要訪問(wèn)外網(wǎng)的資源;在反向代理服務(wù)器中,我們的角色是站點(diǎn),目的是把站點(diǎn)的資源發(fā)布出去讓其他客戶端能夠訪問(wèn)。

    知道了這兩個(gè)概念,就可以學(xué)習(xí)如何讓Nginx服務(wù)器來(lái)提供代理和反向代理服務(wù)器了。

    Nginx的正向代理服務(wù) 

    Nginx服務(wù)器正向代理服務(wù)的配置的3個(gè)指令

    在實(shí)際應(yīng)用中,使用Nginx服務(wù)器代理服務(wù)功能的情況相對(duì)少一些,Nginx代理服務(wù)本向也相對(duì)簡(jiǎn)單,涉及的主要指令不多。這些指令原則上可以出現(xiàn)在Nginx配置文件的http塊、server塊或者location塊中,但一般是在搭建的Nginx服務(wù)器中單獨(dú)配置一個(gè)server塊用來(lái)設(shè)置代理服務(wù)。

    1.resolver指令

    該指令用于指定DNS服務(wù)器的IP地址。DNS服務(wù)器的主要工作是進(jìn)行域名的解析,將域名映射為對(duì)應(yīng)的IP地址。該指令的語(yǔ)法結(jié)構(gòu)為:

    resolver address ... [valid=time];

    address,DNS服務(wù)器的IP地址。如果不指定商品號(hào),默認(rèn)使用53端口。

    time,設(shè)置數(shù)據(jù)包在網(wǎng)絡(luò)中的有效時(shí)間。出現(xiàn)該指令的主要原因是,在訪問(wèn)站點(diǎn)時(shí),有很多情況使得數(shù)據(jù)包在一定時(shí)間內(nèi)不能被傳遞到目的地,但是又不能讓該數(shù)據(jù)包無(wú)期限地存在,于是就需要設(shè)定一段時(shí)間,當(dāng)數(shù)據(jù)包在這段時(shí)間內(nèi)沒有到達(dá)目的地,就會(huì)被丟棄,然后發(fā)送都會(huì)接收到一個(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í)間,語(yǔ)法結(jié)果為:

    3.proxy_pass指令

    該指令用于設(shè)置代理服務(wù)器的協(xié)議和地址,它不僅僅用于Nginx服務(wù)器的代理服務(wù)器,更主要的是應(yīng)用于反向代理服務(wù),我們馬上就會(huì)談及。該指令的語(yǔ)法結(jié)構(gòu)為:

    proxy_pass URL;

    其中,URL即為設(shè)置的代理服務(wù)器協(xié)議和地址。

    在代理服務(wù)配置中,該指令的設(shè)置相對(duì)固定,因此在這里就不介紹其他細(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配置支持的用于自動(dòng)獲取主機(jī)和URI的變量。配置代理服務(wù)時(shí),一般不要改變?cè)撝噶畹呐渲谩?/p>

     正向代理服務(wù)使用示例

    ..
    server
    {
       resolver 8.8.8.8;
       listen 82;
       location /
       {
           proxy_pass http://$http_host$request_uri;
       }
    }

    實(shí)現(xiàn)的片段很簡(jiǎn)單,設(shè)置DNS服務(wù)器地址為8.8.8.8,使用默認(rèn)的53號(hào)端口作為DNS服務(wù)器的服務(wù)端口,代理服務(wù)的監(jiān)聽端口設(shè)置為82端口,Nginx服務(wù)器接收到的所有請(qǐng)求都由第5行的location塊進(jìn)行過(guò)濾處理。

    Nginx服務(wù)器代理服務(wù)使用的場(chǎng)合不多,從上一節(jié)的配置指令來(lái)看,功能也相對(duì)簡(jiǎn)單。在使用過(guò)程中,有一些需要注意的事項(xiàng)在這里說(shuō)明一下。

    首先,我們?cè)谏厦嫣岬竭^(guò),設(shè)置Nginx服務(wù)器的代理服務(wù)器,一般是配置到一個(gè)server塊中,注意,在該server塊中,不要出現(xiàn) server_name指令,即不要設(shè)置虛擬主機(jī)的名稱或IP。而resolver指令是必需的,如果沒有該指令,Nginx服務(wù)器無(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ù)器反向代理用到的指令如果沒有特別說(shuō)明,原則上可以出現(xiàn)在Nginx配置文件的http塊、server塊或者location塊中,但同正向代理服務(wù)的設(shè)置一樣,一般是在搭建的Nginx服務(wù)器中單獨(dú)配置一個(gè)server塊來(lái)設(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)用過(guò)程中需要注意一些配置細(xì)節(jié),需要小心使用。

    1.proxy_pass指令

        該指令用來(lái)設(shè)置被代理服務(wù)器的地址,可以是主機(jī)名稱、IP地址加端口號(hào)等形式。其語(yǔ)法結(jié)構(gòu)為:

    proxy_pass URL;

       其中,URL為要設(shè)置的被代理服務(wù)器的地址,包含傳輸協(xié)議、主機(jī)名稱或IP地址加商品號(hào)、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;

    在使用該指令的過(guò)程中還需要注意,URL中是否包含有URI,Nginx服務(wù)器的處理方式是不同的。如果URL中不包含URI,Nginx服務(wù)器不會(huì)改變?cè)刂返腢RI;但是如果包含了URI,Nginx服務(wù)器將會(huì)使用新的URI替代原來(lái)的URI。我們舉例來(lái)說(shuō)明。

    請(qǐng)看下面的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ā)起請(qǐng)求,該請(qǐng)求被配置中顯示的location塊進(jìn)行處理,由于proxy_pass指令變量不含有URI,所以轉(zhuǎn)向的地址為“http:///192.168.1.1/server ”;我們?cè)賮?lái)看下面的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ā)起請(qǐng)求,Nginx服務(wù)器將會(huì)把地址轉(zhuǎn)向“http://192.168.1.1/loc/ ”;

        通過(guò)上面的實(shí)例,我們可以總結(jié) 出,在使用proxy_pass指令時(shí),如果不想改變?cè)刂分械腢RI,就不要在URL變量中配置URI。

        明白了上面這兩個(gè)例子的用法,我們來(lái)解釋大家經(jīng)常討論的一個(gè)問(wèn)題,就是proxy_pass指令的URL變量末尾是否加斜杠“/”的問(wèn)題。

        請(qǐng)看這兩個(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)象了。大家注意各例子之間的對(duì)比。

        實(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變量的值來(lái)匹配不包含URI的請(qǐng)求URL。由于請(qǐng)求URL中不包含URL,因此配置1和配置2的效果是一樣的。比如客戶端的請(qǐng)求URL為“http://www.myweb.name/index.htm”,其將會(huì)被實(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變量的值來(lái)匹配包含的URI“/server/”的請(qǐng)求URL。這時(shí),使用配置1和配置2的轉(zhuǎn)向結(jié)果就不相同了。使用配置1和配置2的轉(zhuǎn)向效果就不相同了。使用配置1時(shí)候,proxy_pass指令中的URL變量不包含URI,Nginx服務(wù)器將不改變?cè)刂返腢RI,使用配置2的時(shí)候,proxy_pass指令中的URL變量包含URI“/”,Nginx服務(wù)器會(huì)將原地址的URI替換為”/”。

    比如客戶端的請(qǐng)求URI為“http://www.myweb.name/server/index.htm”將會(huì)被實(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)用過(guò)程中,一定要注意到該指令在配置上的細(xì)節(jié)問(wèn)題,分清楚URL和URI的區(qū)別與聯(lián)系,并能夠正確使用它們配置出符合需求的Nginx服務(wù)器。

    2.proxy_hide_header指令

     該指令用于設(shè)置Nginx服務(wù)器在發(fā)送HTTP響應(yīng)時(shí),隱藏一些頭域信息。其語(yǔ)法結(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”等來(lái)自被代理服務(wù)器的頭域信息。該指令可以設(shè)置這些頭域信息以被發(fā)送,其語(yǔ)法結(jié)構(gòu)為:

    proxy_pass_header field;

    4.proxy_pass_request_body指令

    該指令用于配置是否將客戶端請(qǐng)求的請(qǐng)求體發(fā)送給代理服務(wù)器,其語(yǔ)法結(jié)構(gòu)為:

    proxy_pass_request_body on | off;

    默認(rèn)開啟(on),開頭可以在http塊、server塊或者location塊中進(jìn)行配置。

    5.proxy_pass_request_headers指令

    該指令用于配置是否將客戶端請(qǐng)求的請(qǐng)求頭發(fā)送給代理服務(wù)器,其語(yǔ)法結(jié)構(gòu)為:

    proxy_pass_request_headers  on | off;

    默認(rèn)開啟(on),開頭可以在http塊、server塊或者location塊中進(jìn)行配置。

    6.proxy_set_header指令

    該指令可以理發(fā)Nginx服務(wù)器接收到的客戶端請(qǐng)求的請(qǐng)求頭信息,然后將新的請(qǐng)求頭發(fā)送給被代理的服務(wù)器,其語(yǔ)法結(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;

     請(qǐng)看一些設(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ù)器接收到的客戶端請(qǐng)求的請(qǐng)求信息,然后將新的請(qǐng)求體發(fā)送給被代理的服務(wù)器。其語(yǔ)法結(jié)構(gòu)為:

    proxy_set_body_value;

      其中,value為更改的信息,支持使用文本、變量或者變量的組合。

    8.proxy_bind指令

    官方文檔中對(duì)該指令的解釋是,強(qiáng)制將與代理主機(jī)的連接綁定到指定的IP地址。通俗來(lái)講就是,在配置多個(gè)基于名稱或者基于IP地址。通俗來(lái)講就是,在配置了多個(gè)基于名稱或者基于IP主機(jī)的情況下,如果我們希望代理連接由指定的主機(jī)處理,就可以使用該指令進(jìn)行配置,其語(yǔ)法結(jié)構(gòu)為:

    proxy_bind adress;

      其中,adress為指定主機(jī)的IP地址。 

    9.proxy_connect_timeout指令

    該指令配置Nginx服務(wù)器與后端被代理服務(wù)器嘗試建立連接的超時(shí)時(shí)間,其語(yǔ)法結(jié)構(gòu)為:

    proxy_connect_timeout time;

    其中,time為設(shè)置的超時(shí)時(shí)間,默認(rèn)60s。

    10.proxy_read_timeout指令

    該指令配置Nginx服務(wù)器向后端被代理服務(wù)器(組)發(fā)出的read請(qǐng)求后,等待響應(yīng)的超時(shí)時(shí)間,其語(yǔ)法結(jié)構(gòu)為:

    proxy_read_timeout time;

    其中,time為設(shè)置的超時(shí)時(shí)間,默認(rèn)60s。

    11.proxy_send_timeout指令

    該指令配置Nginx服務(wù)器向后端被代理服務(wù)器(組)發(fā)出的write請(qǐng)求后,等待響應(yīng)的超時(shí)時(shí)間,其語(yǔ)法結(jié)構(gòu)為:

    proxy_write_timeount time

    其中,time為設(shè)置的超時(shí)時(shí)間,默認(rèn)60s。

    12.proxy_http_version指令

    該指令設(shè)置用于Nginx服務(wù)器提供代理服務(wù)的HTTP協(xié)議版本,其語(yǔ)法結(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ù)器請(qǐng)求被代理服務(wù)器時(shí)使用的請(qǐng)求方法,一般為POST或者GET。設(shè)置了該指令,客戶端的請(qǐng)求方法將被忽略。其語(yǔ)法結(jié)構(gòu)為:

    proxy_method method;

    其中,method的值可以設(shè)置為POST或者GET,注意不加引號(hào)。

    14.proxy_ignore_client_abort指令

    該指令用過(guò)設(shè)置在客戶端中斷網(wǎng)絡(luò)請(qǐng)求時(shí),Nginx服務(wù)器是否中斷對(duì)被代理服務(wù)器的請(qǐng)求,其語(yǔ)法結(jié)構(gòu)為:

    proxy_ignore_client_abort on | off

    默認(rèn)設(shè)置為off,當(dāng)客戶端中斷網(wǎng)絡(luò)請(qǐng)求時(shí),Nginx服務(wù)器中斷對(duì)被代理服務(wù)器的請(qǐng)求。

    15.proxy_ignore_header指令

    該指令用于設(shè)置一些HTTP響應(yīng)頭的頭域,Nginx服務(wù)器接收到被代理服務(wù)器的響應(yīng)數(shù)據(jù)后,不會(huì)處理被設(shè)置的頭域。其語(yǔ)法結(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ù)器通過(guò)proxy_pass指令將客戶端的請(qǐng)求地址重寫為被代理服務(wù)器的地址,那么Nginx服務(wù)器返回客戶端的響應(yīng)頭中“Location”頭域顯示的地址就應(yīng)該和客戶端發(fā)起請(qǐng)求的地址相對(duì)應(yīng),而不是代理服務(wù)器直接返回的地址信息,否則就會(huì)出問(wèn)題。該指令解決了這個(gè)問(wèn)題,可以把代理服務(wù)器返回的地址信息更改為需要的地址信息。其語(yǔ)法結(jié)構(gòu)為:

    proxy_redirect redirect replacement
    proxy_redirect default;
    proxy_redirect off;

    redirect,匹配“Location”頭域值的字符串,支持變量的使用和正則表達(dá)式。

    replacement,用于替換redirect變量?jī)?nèi)容的字符串,支持變量的使用。

    該指令的用法我們通過(guò)幾個(gè)配置實(shí)例來(lái)解釋。

    對(duì)于第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ù)器會(huì)將“Location”頭域信息更改為:

    Location:http://myweb/frontend//some/uri;

    這樣,客戶端收到的響應(yīng)信息頭部中的“Location”頭域就被更改了。

    結(jié)構(gòu) 2使用default,代表使用location塊的uri變量作為replacement,并使用proxy_pass變量作為redirect。請(qǐng)看下面兩段配置,它們的配置效果是等同的。

    #配置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è)置為無(wú)效。

    17.proxy_intercept_errors指令

    該指令用于配置一個(gè)狀態(tài)是否開啟還是關(guān)閉。在開啟狀態(tài)時(shí),如果被代理的服務(wù)器返回的HTTP狀態(tài)碼為400或者大于400,則Nginx服務(wù)器使用自己定義的錯(cuò)誤頁(yè)(使用error_page指令);如果是關(guān)閉狀態(tài),Nginx服務(wù)器直接將被代理服務(wù)器返回的HTTP狀態(tài)返回給客戶端。其請(qǐng)求結(jié)構(gòu)為

    proxy_intercept_errors on | off

    18.proxy_headers_hash_max_size指令

    該指令用于配置HTTP報(bào)文頭哈希表的容量,其語(yǔ)法結(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類型、請(qǐng)求頭名等,使用哈希表存儲(chǔ)這些信息。Nginx服務(wù)器在申請(qǐng)存放HTTP報(bào)文頭的空間時(shí),通常以固定大小為單位申請(qǐng),該大小由proxy_headers_hash_bucket_size指令配置。

    在Nignx配置中,不僅能夠配置整個(gè)哈希表的大小上限,對(duì)大部分內(nèi)容項(xiàng),也可以配置其大小上限,比如server_names_hash_max_size指令和server_names_hash_bucket_size指令用來(lái)設(shè)置服務(wù)器名稱的字符數(shù)長(zhǎng)度。

    19.proxy_headers_hash_bucket_size指令

    該指令用于設(shè)置Nginx服務(wù)器申請(qǐng)存放HTTP報(bào)文頭的哈希表容量的單位大小。該指令的具體作用在上面proxy_headers_bucket_size指令的使用中已經(jīng)說(shuō)明。其語(yǔ)法結(jié)構(gòu)為:

    proxy_headers_hash_bucket_size size;

    20.proxy_next_upstream指令

    在配置Nginx服務(wù)器反向代理功能時(shí),如果使用upstream指令配置了一組服務(wù)器作為代理 服務(wù)器,服務(wù)器組中各服務(wù)器的訪問(wèn)規(guī)則遵循upstream指令配置的輪詢規(guī)則 ,同時(shí)可以使用該指令配置在發(fā)生哪些異常情況時(shí),將請(qǐng)求順次交由下一個(gè)組內(nèi)服務(wù)器處理。該指令的語(yǔ)法結(jié)構(gòu)為:

    proxy_next_upstream status ...;

    其中,status為設(shè)置的服務(wù)器返回狀態(tài),可以是一個(gè)或者多個(gè)。這些狀態(tài)包括:

    error,建立連接、向被代理服務(wù)器發(fā)送請(qǐng)求或者讀取響應(yīng)頭時(shí)服務(wù)器發(fā)生連接錯(cuò)誤。

    timeout,建立連接、向被代理服務(wù)器發(fā)送請(qǐng)求或者讀取響應(yīng)頭時(shí)服務(wù)器發(fā)生連接超時(shí)。

    invalid_header,被代理的服務(wù)器返回的響應(yīng)頭為空或者無(wú)效。

    http_500|http_502|http_503|http_504|http_404,被代理的服務(wù)器返回500、502、503、504或者404狀態(tài)代碼。

    off,無(wú)法將請(qǐng)求發(fā)送給被代理的服務(wù)器。

    注意

    與被代理的服務(wù)器進(jìn)行數(shù)據(jù)傳輸?shù)倪^(guò)程中發(fā)送錯(cuò)誤的請(qǐng)求,不包含在該指令支持的狀態(tài)之內(nèi)。

    21.proxy_ssl_session_reuse指令

    該指令用于配置是否使用基于SSL安全協(xié)議的會(huì)話連接(“https://”)被代理的服務(wù)器,其語(yǔ)法結(jié)構(gòu)為:

    proxy_ssl_session_reuse on | off 

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)