前置機(jī)用nginx服務(wù)代理服務(wù)之后,訪問(wèn)代理之后的地址報(bào)錯(cuò)nginx 403 forbidden 錯(cuò)誤,排查之后因?yàn)槁窂讲黄ヅ鋵?dǎo)致。整理下排查過(guò)程

以下從Nginx 配置、后端服務(wù)、網(wǎng)絡(luò)與權(quán)限三方面分析可能導(dǎo)致 403
的原因及解決辦法,按步驟排查即可:
一、Nginx 配置層面
- 路徑匹配與轉(zhuǎn)發(fā)問(wèn)題
- 檢查
location
路徑是否精準(zhǔn)匹配,比如請(qǐng)求路徑帶額外參數(shù)、末尾斜杠不一致,可能觸發(fā)后端路由規(guī)則差異??蓢L試調(diào)整 location
為正則匹配(如 ~ /GatewayMsg/http/api/proxy/invoke
),或統(tǒng)一路徑末尾斜杠,保證和后端預(yù)期一致。 - 驗(yàn)證
proxy_pass
地址是否正確(包括協(xié)議、IP、端口、路徑),直接curl后端地址(curl https://IP:8888/GatewayMsg/http/api/proxy/invoke
),確認(rèn)返回正常,排除后端本身路徑問(wèn)題。
proxy_set_header
可能遺漏關(guān)鍵頭信息(如 Referer
、User-Agent
等),后端若校驗(yàn)這些頭會(huì)拒絕請(qǐng)求??膳R時(shí)添加通用頭測(cè)試:proxy_set_header User-Agent $http_user_agent;
proxy_set_header Referer $http_referer;
- 檢查
X-Forwarded-For
等頭是否觸發(fā)后端安全策略(如IP白名單校驗(yàn)),可注釋相關(guān)頭(# proxy_set_header X-Real-IP $remote_addr;
等),測(cè)試是否因偽造IP被攔截。
二、后端服務(wù)層面
- 后端可能基于
Host
頭做域名白名單,Nginx 傳遞的 Host
(proxy_set_header Host $host;
)若與后端預(yù)期域名不符,會(huì)觸發(fā)403。修改為固定后端域名:proxy_set_header Host "your-backend-domain.com";
- 檢查后端是否需要 Token、Cookie 等認(rèn)證信息,Nginx 代理未傳遞時(shí),后端會(huì)拒絕匿名請(qǐng)求。可在請(qǐng)求頭手動(dòng)添加測(cè)試(如
proxy_set_header Authorization "Bearer your-token";
),或確認(rèn)前端請(qǐng)求帶認(rèn)證時(shí),Nginx 未丟失 Cookie(需配置 proxy_cookie_domain
等指令同步 Cookie 域)。
- 后端路由可能區(qū)分環(huán)境(測(cè)試/生產(chǎn)),Nginx 代理的請(qǐng)求參數(shù)、Header 觸發(fā)了生產(chǎn)環(huán)境權(quán)限,而直接訪問(wèn)用了測(cè)試權(quán)限。核對(duì)后端路由配置,確保代理請(qǐng)求的路徑、參數(shù)完全匹配后端開(kāi)放的接口規(guī)則。
- 后端靜態(tài)資源、接口權(quán)限配置錯(cuò)誤(如文件系統(tǒng)權(quán)限、接口角色校驗(yàn)),直接訪問(wèn)可能走了本地調(diào)試豁免邏輯,代理后觸發(fā)正式權(quán)限。聯(lián)系后端排查接口權(quán)限配置,確認(rèn)
/GatewayMsg/http/api/proxy/invoke
路徑的訪問(wèn)控制規(guī)則。
三、網(wǎng)絡(luò)與環(huán)境層面
proxy_pass
用 https
但 Nginx 未正確加載證書(shū)、或后端證書(shū)校驗(yàn)嚴(yán)格(如自簽證書(shū)未信任),會(huì)導(dǎo)致握手失敗或校驗(yàn)拒絕。若為測(cè)試環(huán)境,可臨時(shí)關(guān)閉證書(shū)校驗(yàn)(不建議生產(chǎn)):proxy_ssl_verify off;
proxy_ssl_trusted_certificate /path/to/ca.crt; # 可選,信任自簽證書(shū)
- 檢查 Nginx 與后端的 SSL 協(xié)議、加密套件是否兼容,后端限制僅特定 TLS 版本時(shí),需在
proxy_pass
配置:proxy_ssl_protocols TLSv1.2 TLSv1.3;
- 后端服務(wù)器防火墻(如
iptables
、云安全組)可能限制了 Nginx 服務(wù)器的訪問(wèn),僅允許本地/特定IP訪問(wèn)。登錄后端服務(wù)器,放行 Nginx 所在IP的請(qǐng)求(如 iptables -A INPUT -s nginx-ip -j ACCEPT
),或檢查云服務(wù)商安全組規(guī)則。 - 后端應(yīng)用自身的安全模塊(如 WAF、限流插件)誤攔截了代理請(qǐng)求,可臨時(shí)關(guān)閉相關(guān)模塊測(cè)試,或添加 Nginx IP 到白名單。
按 “Nginx 配置 → 后端權(quán)限 → 網(wǎng)絡(luò)環(huán)境” 順序逐一排查,重點(diǎn)驗(yàn)證請(qǐng)求頭、路徑匹配、認(rèn)證信息、SSL 及防火墻,基本能定位 403
根源。若仍未解決,可開(kāi)啟 Nginx 調(diào)試日志(error_log /var/log/nginx/error.log debug;
)和后端應(yīng)用日志,追蹤請(qǐng)求完整流程。
閱讀原文:原文鏈接
該文章在 2025/7/1 23:29:22 編輯過(guò)