Nginx配置動態(tài)代理后通過curl訪問報403問題
今天生產(chǎn)環(huán)境遇到了一個問題,在測試環(huán)境其他系統(tǒng)調(diào)用我們系統(tǒng)的一個接口沒問題,在生產(chǎn)環(huán)境死活調(diào)不通
問題描述
有業(yè)務(wù)人員反饋最近剛發(fā)版的一個服務(wù)提供的接口,其他系統(tǒng)一直調(diào)用不通。
嘗試解決
分析
單體項目,系統(tǒng)部署架構(gòu)很簡單,抽象一下如下圖所示:
經(jīng)過幾次嘗試有如下發(fā)現(xiàn):
- 瀏覽器上訪問正常,不管是外網(wǎng)還是局域網(wǎng)
- 通過curl請求接口,請求tomcat地址正常,請求nginx地址返回403
- 其他系統(tǒng)通過通過nginx地址調(diào)用返回403,通過tomcat地址就正常
在網(wǎng)上找的解決方案
在網(wǎng)上搜索nginx配置動態(tài)代理報403,一般搜到4種情況
1、由于啟動用戶和 nginx 工作用戶不一致所致
對比nginx配置文件中的用戶與實際啟動nginx用戶是否一致
# 查看實際啟動用戶 ps -ef | grep nginx # 查看配置文件中配置的用戶 cat /usr/local/nginx/conf/nginx.conf
2、缺少 index.html 或者 index.php 文件,就是配置文件中 index index.html index.htm 這行中的指定的文件
查看root的配置目錄下是否有index.html等文件,沒有的話會報403
server { listen 80; server_name localhost; index index.html; root /data/www; }
3、權(quán)限問題,如果 nginx 沒有 web 目錄的操作權(quán)限,也會出現(xiàn) 403 錯誤
運行nginx的用戶對root的配置目錄沒有讀寫權(quán)限
# 修改web目錄的讀寫權(quán)限,或者把nginx的啟動用戶改成目錄的所屬用戶,或者將web目錄的所屬用戶改為nginx的啟動用戶,重啟nginx即可 chmod -R 777 /data/www chown -R nginx:nginx /data/www
4、SELinux 設(shè)置為開啟狀態(tài)(enabled)的原因
# 查看當前selinux的狀態(tài) /usr/sbin/sestatus -v # 將SELINUX=enforcing修改為selinux=disabled vi /etc/selinux/config SELINUX=disabled # 重啟系統(tǒng)生效 reboot
是終解決
最終發(fā)現(xiàn)都不是上述四種情況,經(jīng)過多方分析,發(fā)現(xiàn)配置目錄下多了一個配置/usr/local/nginx/conf/conf.d/agent_deny.config,內(nèi)容大概如下所示:
# 禁止Scrapy等工具的抓取 if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) { return 403; } # 禁止UA及UA為空的訪問 # 。。。 # 禁止非GET/POST方式的抓取 # 。。。
第一條就將curl和httpclient給禁用了,這也就解決了問題描述里對方系統(tǒng)調(diào)用接口和使用curl調(diào)用nginx地址時調(diào)不通的原因了。
解決方法,最終提供兩個思路:
1、httpclient調(diào)用時修改User_Agent
2、直接調(diào)用tomcat接口
總結(jié)
遇到問題多總結(jié),網(wǎng)上的答案不一定能解決你的問題,還要具體問題具體分析,多分析現(xiàn)象,根據(jù)現(xiàn)象找到蛛絲馬跡。
到此這篇關(guān)于Nginx配置動態(tài)代理后通過curl訪問報403問題的文章就介紹到這了,更多相關(guān)Nginx動態(tài)代理報403內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Prometheus 和 Grafana 通過nginx-exporter監(jiān)控nginx的
nginx-exporter 是 Prometheus 用來從 Nginx 收集指標的組件,這篇文章給大家介紹Prometheus 和 Grafana 通過nginx-exporter監(jiān)控nginx的詳細步驟,感興趣的朋友跟隨小編一起看看吧2024-08-08詳解nginx同一端口監(jiān)聽多個域名和同時監(jiān)聽http與https
這篇文章主要介紹了詳解nginx同一端口監(jiān)聽多個域名和同時監(jiān)聽http與https的相關(guān)資料,需要的朋友可以參考下2017-05-05