nginx代理參數(shù)proxy_pass的實(shí)現(xiàn)
proxy_pass參數(shù)用于配置反向代理,指定客戶(hù)端請(qǐng)求被轉(zhuǎn)發(fā)到后端服務(wù)器,后端地址可以是域名、ip端口URI
代理后端報(bào)錯(cuò)提示本地找不到CSS文件、JavaScript文件或圖片
例如:nginx :10.1.74.109
后端服務(wù):http://10.1.74.109:8082
參數(shù)配置:
location /harbor { proxy_pass http://10.1.74.109:8082; }
訪問(wèn)http://10.1.74.109/zabbix 顯示不全,提示文件css等靜態(tài)文件不存在。
原因在于proxy_pass確實(shí)指向后端服務(wù)器,但瀏覽器加載頁(yè)面時(shí),可能會(huì)請(qǐng)求一些靜態(tài)資源,但是這些請(qǐng)求可能不包含/zabbix前綴,也可能靜態(tài)資源是動(dòng)態(tài)生成的,因此才會(huì)去本地去查找這些文件
例如以上后端登錄前訪問(wèn)得地址為http://10.1.74.109:8082/,登錄成功后得地址為http://10.1.74.109:8082/zabbix.php?action=dashboard.view,沒(méi)有包含/zabbix前綴
如果當(dāng)后端地址后綴不會(huì)發(fā)生改變的前提代理,一般來(lái)說(shuō)是正常的
處理方式:使用proxy_set_header設(shè)置正確的Host頭
location /zabbix { proxy_pass http://10.1.74.109:8082/; #url后面必須加上"/" proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; keepalive_timeout 500; }
參數(shù) | 含義 |
---|---|
proxy_set_header Host $host; | nginx在轉(zhuǎn)發(fā)請(qǐng)求時(shí),將Host請(qǐng)求頭的值設(shè)置為原始請(qǐng)求的主機(jī)名和端口,后端可能依賴(lài)Host頭來(lái)確定應(yīng)該提供那些內(nèi)容 |
proxy_set_header X-Real-IP $remote_addr; | X-Real-IP用于設(shè)別發(fā)起請(qǐng)求客戶(hù)端的真是IP地址,$remote_addr是一個(gè)變量包含客戶(hù)端的IP地址 |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | X-Forwarded-For 表示HTTP請(qǐng)求的來(lái)源地址,用于追蹤請(qǐng)求來(lái)源,$proxy_add_x_forwarded_for 是一個(gè)特殊的變量,包含原始請(qǐng)求的 X-Forwarded-For 頭(如果存在的話)和客戶(hù)端的 IP 地址。后端服務(wù)器可以看到所有經(jīng)過(guò)的代理服務(wù)器和原始客戶(hù)端的 IP 地址。 |
keepalive_timeout 500; | 設(shè)置長(zhǎng)連接超時(shí)時(shí)間,當(dāng)客戶(hù)端和服務(wù)器之間建立一個(gè)長(zhǎng)連接后,該連接會(huì)在設(shè)置時(shí)間內(nèi)保持打開(kāi)狀態(tài),以便客戶(hù)端通過(guò)相同的連接發(fā)送多個(gè)請(qǐng)求,減少連接開(kāi)銷(xiāo),提高性能 |
proxy_pass不同寫(xiě)法的影響
客戶(hù)端請(qǐng)求地址為:www.ljx.com/a.html
方式一:proxy_pass http://10.1.1.1
;
location /ceshi/ { proxy_pass http://10.1.1.1; ... }
- 請(qǐng)求地址:www.ljx.com/ceshi/a.html
- 代理后地址:http://10.1.1.1/ceshi/a.html
- 解釋?zhuān)和暾恼?qǐng)求URI(包括/ceshi/a.html)將被發(fā)送到后端服務(wù)器10.1.1.1。由于proxy_pass沒(méi)有指定URI部分,因此原始請(qǐng)求的URI保持不變。
方式二:proxy_pass http://10.1.1.1/
;
location /ceshi/ { proxy_pass http://10.1.1.1/; ... }
- 請(qǐng)求地址:www.ljx.com/ceshi/a.html
- 代理后地址:http://10.1.1.1/a.html
- 解釋?zhuān)河捎趐roxy_pass后面有一個(gè)斜杠/,nginx會(huì)忽略原始請(qǐng)求URI中的/ceshi/部分,只保留a.html部分,并將其發(fā)送到后端服務(wù)器
方式三:proxy_pass http://10.1.1.1/index/
;
location /ceshi/ { proxy_pass http://10.1.1.1/index/; ... }
- 請(qǐng)求地址:www.ljx.com/ceshi/a.html
- 代理后地址:http://10.1.1.1/index/a.html
- 解釋?zhuān)涸颊?qǐng)求的URI中的/ceshi/被替換為/index/,然后發(fā)送到后端服務(wù)器。路徑的其余部分a.html保持不變
方式四:proxy_pass http://10.1.1.1/somepath
;
location /ceshi/ { proxy_pass http://10.1.1.1/somepath; ... }
- 請(qǐng)求地址:www.ljx.com/ceshi/a.html
- 代理后地址:http://10.1.1.1/somepath
- 解釋?zhuān)簾o(wú)論原始請(qǐng)求的URI是什么,都會(huì)被完全替換為proxy_pass后面指定的URI(在這里是/somepath)。查詢(xún)字符串(如果有的話)也會(huì)被忽略
到此這篇關(guān)于nginx代理參數(shù)proxy_pass的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)nginx proxy_pass內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Nginx服務(wù)器的反向代理proxy_pass配置方法講解
- Nginx代理proxy pass配置去除前綴的實(shí)現(xiàn)
- nginx 反向代理之 proxy_pass的實(shí)現(xiàn)
- nginx配置中proxy_pass反向代理502的bug記錄
- nginx配置proxy_pass代理轉(zhuǎn)發(fā)時(shí)報(bào)404問(wèn)題
- nginx反向代理proxy_pass遇到的死循環(huán)問(wèn)題
- Nginx?反向代理緩存(proxy_cache)的實(shí)現(xiàn)
- nginx反向代理proxy_set_header
- Nginx Proxy Manager輕松搭建反向代理的實(shí)現(xiàn)
- Nginx Proxy 代理測(cè)試的實(shí)現(xiàn)
相關(guān)文章
Linux平臺(tái)通過(guò)nginx和vsftpd構(gòu)建圖片服務(wù)器
這篇文章主要介紹了Linux平臺(tái)通過(guò)nginx和vsftpd構(gòu)建圖片服務(wù)器,需要的朋友可以參考下2017-05-05Nginx+Tomcat實(shí)現(xiàn)負(fù)載均衡、動(dòng)靜分離的原理解析
這篇文章主要介紹了Nginx+Tomcat實(shí)現(xiàn)負(fù)載均衡、動(dòng)靜分離的原理解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02