nginx代理無法訪問后端服務(wù)的解決
nginx代理無法訪問后端服務(wù)
現(xiàn)象
nginx配置location網(wǎng)頁顯示css/js文件無法加載,但是后端服務(wù)訪問正常,估計是后端服務(wù)將后綴路徑寫死導(dǎo)致nginx無法跳轉(zhuǎn)
報錯
2022/08/05 13:00:24 [error] 3389#e: *1092213 upstream timed out (110: Connection timed out) while reading upstream, client: 10.6. 18.19, server: localhost, request: “POST /rcenter/rpt/api/showReport HTTP/1.1”, upstream: “http://10.6.6.65:8880/rcenter/rpt/api/showReport” host: “10.6.6.67”
處理
以下這種也寫法也可以,但是配置有多個location就會亂了
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { proxy_pass "http://域名+端口";
最好一個rewrite針對具體的location
location /prod { proxy_pass http://10.1.5.17:20005; rewrite ^/prod(.*) http://10.1.5.17:20005/$1 permanent; }
解決nginx代理后,前端拿不到后端自定義的header
先說結(jié)論,因為前端和nginx對接,所以需要在nginx添加如下配置向前端暴露header
add_header 'Access-Control-Expose-Headers' 'Authorization'
排查過程
1.后端設(shè)置了Authorization 的響應(yīng)頭作為token的返回,前后端本地聯(lián)調(diào)沒有問題
response.setHeader("Authorization", Objects.equals(tokenNew, "") ?token:tokenNew);
2. 發(fā)布到服務(wù)器上,開啟nginx代理,結(jié)果前端返回的接口拿不到自定義的Header,然后到network里面一看,明明有啊
3.百度了一下,網(wǎng)上說后端設(shè)置屬性add_header 'Access-Control-Expose-Headers' 'Authorization'
結(jié)果還是不行,為何?突然想到我是用nginx代理的,前端直接訪問的nginx,是不是要在nginx中設(shè)置
4.果然,如果用nginx代理,需要在nginx中設(shè)置,如果不用nginx代理直接在后端響應(yīng)中設(shè)置
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx偽靜態(tài)配置和常用Rewrite偽靜態(tài)規(guī)則集錦
偽靜態(tài)是一種可以把文件后綴改成任何可能的一種方法,如果我想把php文件偽靜態(tài)成html文件,這種相當簡單的,下面我來介紹nginx 偽靜態(tài)配置方法有需要了解的朋友可參考。2014-06-06在Nginx服務(wù)器下配置StartSSL和SSL的教程
這篇文章主要介紹了在Nginx服務(wù)器下配置StartSSL和SSL的教程,其中申請證書的步驟確實比較麻煩一些,不過出于安全考慮:p需要的朋友可以參考下2015-07-07Nginx配置PATHINFO隱藏thinkphp index.php
這篇文章主要介紹了Nginx配置PATHINFO隱藏thinkphp index.php,本文直接給出配置示例,需要的朋友可以參考下2015-07-07