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.conf2、缺少 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/wwwchown -R nginx:nginx /data/www4、SELinux 設(shè)置為開啟狀態(tài)(enabled)的原因
# 查看當(dāng)前selinux的狀態(tài)/usr/sbin/sestatus -v# 將SELINUX=enforcing修改為selinux=disabledvi /etc/selinux/configSELINUX=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)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
