有交做拼多多網(wǎng)站的嗎產(chǎn)品推廣平臺有哪些
proxy_pass參數(shù)用于配置反向代理,指定客戶端請求被轉(zhuǎn)發(fā)到后端服務(wù)器,后端地址可以是域名、ip端口URI
代理后端報錯提示本地找不到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;}
訪問http://10.1.74.109/zabbix 顯示不全,提示文件css等靜態(tài)文件不存在。
原因在于proxy_pass確實指向后端服務(wù)器,但瀏覽器加載頁面時,可能會請求一些靜態(tài)資源,但是這些請求可能不包含/zabbix前綴,也可能靜態(tài)資源是動態(tài)生成的,因此才會去本地去查找這些文件
例如以上后端登錄前訪問得地址為http://10.1.74.109:8082/,登錄成功后得地址為http://10.1.74.109:8082/zabbix.php?action=dashboard.view,沒有包含/zabbix前綴
如果當(dāng)后端地址后綴不會發(fā)生改變的前提代理,一般來說是正常的
處理方式:
使用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ā)請求時,將Host請求頭的值設(shè)置為原始請求的主機名和端口,后端可能依賴Host頭來確定應(yīng)該提供那些內(nèi)容 |
proxy_set_header X-Real-IP $remote_addr; | X-Real-IP用于設(shè)別發(fā)起請求客戶端的真是IP地址,$remote_addr是一個變量包含客戶端的IP地址 |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | X-Forwarded-For 表示HTTP請求的來源地址,用于追蹤請求來源,$proxy_add_x_forwarded_for 是一個特殊的變量,包含原始請求的 X-Forwarded-For 頭(如果存在的話)和客戶端的 IP 地址。后端服務(wù)器可以看到所有經(jīng)過的代理服務(wù)器和原始客戶端的 IP 地址。 |
keepalive_timeout 500; | 設(shè)置長連接超時時間,當(dāng)客戶端和服務(wù)器之間建立一個長連接后,該連接會在設(shè)置時間內(nèi)保持打開狀態(tài),以便客戶端通過相同的連接發(fā)送多個請求,減少連接開銷,提高性能 |
proxy_pass不同寫法的影響
客戶端請求地址為:www.ljx.com/a.html
方式一:
proxy_pass http://10.1.1.1
;
location /ceshi/
{proxy_pass http://10.1.1.1;...
}
- 請求地址:www.ljx.com/ceshi/a.html
- 代理后地址:http://10.1.1.1/ceshi/a.html
- 解釋:完整的請求URI(包括/ceshi/a.html)將被發(fā)送到后端服務(wù)器10.1.1.1。由于proxy_pass沒有指定URI部分,因此原始請求的URI保持不變。
方式二:
proxy_pass http://10.1.1.1/
;
location /ceshi/
{proxy_pass http://10.1.1.1/;...
}
- 請求地址:www.ljx.com/ceshi/a.html
- 代理后地址:http://10.1.1.1/a.html
- 解釋:由于proxy_pass后面有一個斜杠/,nginx會忽略原始請求URI中的/ceshi/部分,只保留a.html部分,并將其發(fā)送到后端服務(wù)器
方式三:
proxy_pass http://10.1.1.1/index/
;
location /ceshi/
{proxy_pass http://10.1.1.1/index/;...
}
- 請求地址:www.ljx.com/ceshi/a.html
- 代理后地址:http://10.1.1.1/index/a.html
- 解釋:原始請求的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;...
}
- 請求地址:www.ljx.com/ceshi/a.html
- 代理后地址:http://10.1.1.1/somepath
- 解釋:無論原始請求的URI是什么,都會被完全替換為proxy_pass后面指定的URI(在這里是/somepath)。查詢字符串(如果有的話)也會被忽略