Nginx配置動態代理后通過curl訪問報403問題
今天生產環境遇到了一個問題,在測試環境其他系統調用我們系統的一個接口沒問題,在生產環境死活調不通
問題描述有業務人員反饋最近剛發版的一個服務提供的接口,其他系統一直調用不通。
嘗試解決分析單體項目,系統部署架構很簡單,抽象一下如下圖所示:
經過幾次嘗試有如下發現:
瀏覽器上訪問正常,不管是外網還是局域網通過curl請求接口,請求tomcat地址正常,請求nginx地址返回403其他系統通過通過nginx地址調用返回403,通過tomcat地址就正常在網上找的解決方案在網上搜索nginx配置動態代理報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、權限問題,如果 nginx 沒有 web 目錄的操作權限,也會出現 403 錯誤
運行nginx的用戶對root的配置目錄沒有讀寫權限
# 修改web目錄的讀寫權限,或者把nginx的啟動用戶改成目錄的所屬用戶,或者將web目錄的所屬用戶改為nginx的啟動用戶,重啟nginx即可chmod -R 777 /data/wwwchown -R nginx:nginx /data/www4、SELinux 設置為開啟狀態(enabled)的原因
# 查看當前selinux的狀態/usr/sbin/sestatus -v# 將SELINUX=enforcing修改為selinux=disabledvi /etc/selinux/configSELINUX=disabled# 重啟系統生效reboot是終解決最終發現都不是上述四種情況,經過多方分析,發現配置目錄下多了一個配置/usr/local/nginx/conf/conf.d/agent_deny.config,內容大概如下所示:
# 禁止Scrapy等工具的抓取if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {return 403;}# 禁止UA及UA為空的訪問# 。。。# 禁止非GET/POST方式的抓取# 。。。第一條就將curl和httpclient給禁用了,這也就解決了問題描述里對方系統調用接口和使用curl調用nginx地址時調不通的原因了。
解決方法,最終提供兩個思路:
1、httpclient調用時修改User_Agent
2、直接調用tomcat接口
總結遇到問題多總結,網上的答案不一定能解決你的問題,還要具體問題具體分析,多分析現象,根據現象找到蛛絲馬跡。
到此這篇關于Nginx配置動態代理后通過curl訪問報403問題的文章就介紹到這了,更多相關Nginx動態代理報403內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
