第六節(jié)——NGINX反向代理

發(fā)布時(shí)間:2024-02-21
1 介紹
代理通常用于在多個(gè)服務(wù)器之間分發(fā)負(fù)載、無縫從不同網(wǎng)站顯示內(nèi)容或基于http之外的協(xié)議傳遞請(qǐng)求處理應(yīng)用服務(wù)器。
2 傳遞請(qǐng)求給代理服務(wù)器
當(dāng)nginx代理一個(gè)請(qǐng)求時(shí),發(fā)送請(qǐng)求給指定代理服務(wù)器,獲取響應(yīng),返回給客戶端??梢源碚?qǐng)求給http服務(wù)器(另一個(gè)nginx服務(wù)器或任意其它服務(wù)器)或使用特定協(xié)議的非http服務(wù)器(運(yùn)行使用特定框架開發(fā)的應(yīng)用,例如,php或python)。支持協(xié)議包括,fastcgi、uwsgi、scgi和memcached。
為了傳遞請(qǐng)求給http代理服務(wù)器,在location指令中指定proxy_pass指令,例如:
location /some/path/ { proxy_pass http://www.example.com/link/; }
該示例配置導(dǎo)致傳入該location處理的所有請(qǐng)求傳遞到指定地址的代理服務(wù)器。地址可以使用域名或ip地址指定。地址可以包括端口:
location ~ .php { proxy_pass http://127.0.0.1:8000; }
注意,上面的第一個(gè)例子,代理服務(wù)器的地址后面是一個(gè)uri /link/。如果uri和地址一起指定,替換請(qǐng)求匹配location參數(shù)的uri。例如,請(qǐng)求/some/path/page.html被代理到http://www.example.com/link/page.html。如果地址沒有指定uri,或不能決定uri替換的部分,傳入完整uri。
為了傳遞請(qǐng)求到一個(gè)非http代理服務(wù)器,應(yīng)該使用適當(dāng)?shù)腳pass指令:
fastcgi_pass:傳遞請(qǐng)求到fastcgi服務(wù)器。 uwsgi_pass:傳遞請(qǐng)求到uwsgi服務(wù)器。 scgi_pass:傳遞請(qǐng)求到scgi服務(wù)器。 memcached:傳遞請(qǐng)求到memcached服務(wù)器。
注意,在這些情況下,指定地址可能有不同規(guī)則??赡芤残枰獋鬟f額外參數(shù)給服務(wù)器。
proxy_pass指令也可以指向已命名的服務(wù)器組。在這種情況下,請(qǐng)求在組中的服務(wù)器之間分發(fā)。
3 傳遞請(qǐng)求頭
默認(rèn),nginx在代理請(qǐng)求中重新定義兩個(gè)頭字段“host”和“connection”,刪除值為空字符串的頭字段。“host”設(shè)置為$proxy_host變量,“connection”設(shè)置為close。
為了改變?cè)O(shè)置,使用proxy_set_header指令修改其它頭字段。該指令可以在location上下文中指定。也可以在特定server上下文或http上下文中指定。例如:
location /some/path/ { proxy_set_header host $host; proxy_set_header x-real-ip $remote_addr; proxy_pass http://localhost:8000; }
在該配置中,“host”字段設(shè)置為$host變量。
為了防止一個(gè)頭字段傳入代理服務(wù)器,設(shè)置該頭字段為空串:
location /some/path/ { proxy_set_header accept-encoding ""; proxy_pass http://localhost:8000; } 4 配置緩存
默認(rèn),nginx緩存代理服務(wù)器的響應(yīng)。響應(yīng)存儲(chǔ)在內(nèi)部緩存,直到響應(yīng)完全接收才會(huì)發(fā)送到客戶端。緩存有助于優(yōu)化慢客戶端性能,如果響應(yīng)傳入nginx同步到客戶端會(huì)浪費(fèi)代理服務(wù)器時(shí)間。然而,當(dāng)nginx啟用緩存時(shí),nginx允許代理服務(wù)器快速處理響應(yīng),而nginx存儲(chǔ)響應(yīng),客戶端只需多次下載。
proxy_buffering指令負(fù)責(zé)啟用和禁用緩存。默認(rèn)設(shè)置為on,啟用緩存。
proxy_buffers指令控制為請(qǐng)求分配的緩存大小和數(shù)量。代理服務(wù)器響應(yīng)的第一部分存儲(chǔ)在單獨(dú)的緩存中,使用proxy_buffer_size指令設(shè)置該緩存大小。這部分通常包含一個(gè)相當(dāng)小的響應(yīng)頭,響應(yīng)剩下部分可能小于緩存。
在下面例子中,默認(rèn)緩存數(shù)增加和響應(yīng)的第一部分緩存的大小小于默認(rèn)。
location /some/path/ { proxy_buffers 16 4k; proxy_buffer_size 2k; proxy_pass http://localhost:8000; }
如果緩存禁用,當(dāng)nginx從代理服務(wù)器接收響應(yīng)時(shí)同步發(fā)送到客戶端。該行為可能適合需要快速交互的客戶端。
為了禁用特定location的緩存,在location中設(shè)置proxy_buffering指令為off參數(shù):
location /some/path/ { proxy_buffering off; proxy_pass http://localhost:8000; }
在這種情況下,nginx只使用proxy_buffer_size配置的緩存存儲(chǔ)響應(yīng)的當(dāng)前部分。
5 選擇出站ip地址
如果代理服務(wù)器有多個(gè)網(wǎng)絡(luò)接口,有時(shí)可能需要選擇特定源ip地址連接到代理服務(wù)器或上游。如果代理服務(wù)器配置在nginx后面接收來自特定ip網(wǎng)絡(luò)或ip地址范圍的連接。
指定proxy_bind指令和必要的網(wǎng)絡(luò)接口的ip地址:
location /app1/ { proxy_bind 127.0.0.1; proxy_pass http://example.com/app1/; } location /app2/ { proxy_bind 127.0.0.2; proxy_pass http://example.com/app2/; }
ip地址也可以使用變量指定。例如,$server_addr變量傳入接收請(qǐng)求的網(wǎng)絡(luò)接口的ip地址:
location /app3/ { proxy_bind $server_addr; proxy_pass http://example.com/app3/; }
上一個(gè):檢測(cè)可燃?xì)怏w的儀器-安裝了催化燃燒式傳感器的氣體檢測(cè)儀
下一個(gè):電氣行業(yè)發(fā)展平穩(wěn)過渡

刑事拘留保釋需要什么條件
ipad中如何隱藏app(ipad如何隱藏應(yīng)用軟件)
計(jì)算機(jī)設(shè)備型號(hào)是什么,計(jì)算機(jī)設(shè)備型號(hào)是什么
win10系統(tǒng)咋調(diào)煙霧頭(window10怎么調(diào)煙霧頭)
家用配電箱斷路器的選擇
怎么解決小米3屏幕卡頓,小米3有點(diǎn)卡怎么辦
Nexperia針對(duì)汽車以太網(wǎng)推具有開創(chuàng)性且符合OPEN Alliance 標(biāo)準(zhǔn)的硅基ESD器件
隱藏軟件(免費(fèi)的隱藏軟件工具)
牡丹二次開花新技術(shù)出爐
邊坡錨固結(jié)構(gòu)及設(shè)計(jì)計(jì)算講解,建議收藏
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos