摘要:代理請(qǐng)求當(dāng)代理請(qǐng)求時(shí),它會(huì)將請(qǐng)求發(fā)送到指定的代理服務(wù)器,獲取響應(yīng)并將其發(fā)送回客戶端。是否啟用緩沖使用指令,默認(rèn)是開(kāi)啟的。
這是 Nginx 學(xué)習(xí)總結(jié)的第五篇,上一篇介紹到了 Nginx 學(xué)習(xí)總結(jié)(4)—— Rewrite 模塊,這一篇會(huì)對(duì) 反向代理 相關(guān)知識(shí)做一些總結(jié)。
什么是代理?代理通常用于在多個(gè)服務(wù)器之間分配負(fù)載,無(wú)縫地顯示來(lái)自不同網(wǎng)站的內(nèi)容,或通過(guò)除 HTTP 以外的協(xié)議將請(qǐng)求處理傳遞給應(yīng)用程序服務(wù)器。代理請(qǐng)求
當(dāng) Nginx 代理請(qǐng)求時(shí),它會(huì)將請(qǐng)求發(fā)送到指定的代理服務(wù)器,獲取響應(yīng)并將其發(fā)送回客戶端。允許將請(qǐng)求代理到 HTTP 服務(wù)器(另一個(gè) Nginx 服務(wù)器或任何其他服務(wù)器),或使用一個(gè)特定的協(xié)議到非 HTTP 服務(wù)器(它可以運(yùn)行特定框架開(kāi)發(fā)的應(yīng)用程序,如 PHP 或 Python),支持的協(xié)議包括 FastCGI、uwsgi、SCGI 和 memcached。
如果想將一個(gè)請(qǐng)求傳遞(反向代理)給 HTTP 代理服務(wù)器,需要在 Location 模塊中指定 proxy_pass 指令,例如:
location /some/path/ { proxy_pass http://www.example.com; } # 發(fā)送如下請(qǐng)求 # curl 127.0.0.1:80/some/path/ # 該請(qǐng)求會(huì)傳遞到 www.example.com 服務(wù)器中處理
傳遞地址可以指定為域名或 IP 地址,使用 IP 地址時(shí)應(yīng)當(dāng)指定一個(gè)端口:
location ~ .php { proxy_pass http://127.0.0.1:8080; }
如果想將一個(gè)請(qǐng)求傳遞(反向代理)給非 HTTP 代理服務(wù)器,應(yīng)當(dāng)合理選擇使用如下指令:
fastcgi_pass 將請(qǐng)求傳遞給 FastCGI 服務(wù)器;
uwsgi_pass 將請(qǐng)求傳遞給 uwsgi_pass 服務(wù)器;
scgi_pass 將請(qǐng)求傳遞給 SCGI 服務(wù)器;
memcached_pass 將請(qǐng)求傳遞給 memcached 服務(wù)器。
location ~ .php$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
需要注意的是,傳遞地址后面是否帶有 /,轉(zhuǎn)發(fā)的 URL 是不同的:
location ^~ /static/ { proxy_pass http://www.test.com; # 傳遞地址后面不加 "/",轉(zhuǎn)發(fā)地址將包含匹配參數(shù) } # 發(fā)送如下請(qǐng)求 # curl http://localhost/static/index.html # 轉(zhuǎn)發(fā)到 http://www.test.com/static/index.html
location ^~ /static/ { proxy_pass http://www.test.com/; # 傳遞地址后面帶有 "/",轉(zhuǎn)發(fā)地址將不包含匹配參數(shù) } # 發(fā)送如下請(qǐng)求 # curl http://localhost/static/index.html # 轉(zhuǎn)發(fā)到 http://www.test.com/index.html傳遞請(qǐng)求頭
默認(rèn)情況下, Nginx 會(huì)重新定義請(qǐng)求頭:Host 設(shè)置為 $proxy_host 變量的值;Connection 設(shè)置為 close;其他空字符串的頭字段會(huì)被移除。通過(guò) proxy_set_header 指令可以改變請(qǐng)求頭字段的值。該指令可以在 location 塊或更高級(jí)的塊中指定,比如 server 或 http。我們來(lái)看一個(gè)傳遞請(qǐng)求頭的應(yīng)用:
location /some/path/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 后端的Web服務(wù)器可以通過(guò)X-Forwarded-For獲取用戶真實(shí)IP proxy_set_header Accept-Encoding ""; proxy_pass http://localhost:8000; }配置緩沖區(qū)
默認(rèn)情況下, Nginx 緩沖來(lái)自代理服務(wù)器的響應(yīng)。響應(yīng)存儲(chǔ)在內(nèi)部緩沖區(qū)中,在接收到整個(gè)響應(yīng)之前不會(huì)發(fā)送給客戶端。緩沖有助于優(yōu)化慢速客戶端的性能,因?yàn)槿绻憫?yīng)是從 Nginx 同步傳遞到客戶端,可能會(huì)浪費(fèi)代理服務(wù)器的時(shí)間。啟用緩沖后,Nginx 允許代理服務(wù)器快速處理響應(yīng),而 Nginx 在客戶端需要下載它們時(shí),將盡可能多的緩存響應(yīng)內(nèi)容。
是否啟用緩沖使用 proxy_buffering 指令,默認(rèn)是開(kāi)啟的。proxy_buffers 指令控制分配給請(qǐng)求的緩沖區(qū)的大小和數(shù)量,來(lái)自代理服務(wù)器的響應(yīng)的第一部分存儲(chǔ)在一個(gè)多帶帶的緩沖區(qū)中,其大小由 proxy_buffer_size 指令設(shè)置:
location /some/path/ { proxy_buffers 16 4k; proxy_buffer_size 2k; proxy_pass http://localhost:8000; }
如果緩沖被禁用,則在從代理服務(wù)器接收到響應(yīng)的同時(shí)將響應(yīng)同步發(fā)送到客戶端。對(duì)于需要盡快開(kāi)始接收響應(yīng)的快速交互式客戶端來(lái)說(shuō),這種行為可能是需要的:
location /some/path/ { proxy_buffering off; proxy_pass http://localhost:8000; }
參考文章:
NGINX Reverse Proxy
proxy_pass 的小說(shuō)明
Module ngx_http_proxy_module
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/39848.html
摘要:實(shí)現(xiàn)負(fù)載均衡負(fù)載均衡是反向代理技術(shù)的一種運(yùn)用。而實(shí)現(xiàn)負(fù)載均衡的核心在于如何將請(qǐng)求合理地分配給不同的后端服務(wù)器。 這是 Nginx 學(xué)習(xí)總結(jié)的第六篇,上一篇介紹到了 Nginx 學(xué)習(xí)總結(jié)(5) —— 反向代理,本文主要演示結(jié)合 proxy 和 upstream 模塊的使用來(lái)實(shí)現(xiàn) Nginx 的負(fù)載均衡。 Nginx 官網(wǎng)中對(duì) upstream 模塊的介紹:ngx_http_upstrea...
摘要:此外,其也能夠提供強(qiáng)大的反向代理功能。是由為俄羅斯訪問(wèn)量第二的站點(diǎn)開(kāi)發(fā)的,第一個(gè)公開(kāi)版本發(fā)布于年月日。 keepalived+nginx 實(shí)現(xiàn)高可用雙機(jī)熱備 + 負(fù)載均衡架構(gòu) 1 準(zhǔn)備4個(gè)ubuntu16.04虛擬機(jī)(啟用網(wǎng)卡二并使用橋接模式):A服務(wù)器:192.168.0.103 主B服務(wù)器:192.168.0.104 主(備) 前端工程師學(xué)習(xí) Nginx ...
摘要:一下載鏡像我這里用的是輕量級(jí)的鏡像下載完成后,通過(guò)命令檢查一下鏡像是否下載成功二先以簡(jiǎn)單的方式運(yùn)行鏡像以后臺(tái)方式運(yùn)行鏡像指定容器的名稱為命令執(zhí)行完成后,通過(guò)命令確認(rèn)一下容器是否啟動(dòng)成功。 歡迎關(guān)注個(gè)人微信公眾號(hào): 小哈學(xué)Java, 文末分享阿里 P8 高級(jí)架構(gòu)師吐血總結(jié)的 《Java 核心知識(shí)整理&面試.pdf》資源鏈接!!個(gè)人網(wǎng)站: https://www.exception.sit...
摘要:一下載鏡像我這里用的是輕量級(jí)的鏡像下載完成后,通過(guò)命令檢查一下鏡像是否下載成功二先以簡(jiǎn)單的方式運(yùn)行鏡像以后臺(tái)方式運(yùn)行鏡像指定容器的名稱為命令執(zhí)行完成后,通過(guò)命令確認(rèn)一下容器是否啟動(dòng)成功。 歡迎關(guān)注個(gè)人微信公眾號(hào): 小哈學(xué)Java, 文末分享阿里 P8 高級(jí)架構(gòu)師吐血總結(jié)的 《Java 核心知識(shí)整理&面試.pdf》資源鏈接!!個(gè)人網(wǎng)站: https://www.exception.sit...
閱讀 1182·2021-11-23 10:10
閱讀 1518·2021-09-30 09:47
閱讀 900·2021-09-27 14:02
閱讀 2974·2019-08-30 15:45
閱讀 3024·2019-08-30 14:11
閱讀 3618·2019-08-29 14:05
閱讀 1827·2019-08-29 13:51
閱讀 2210·2019-08-29 11:33