Nginx配置動(dòng)態(tài)代理后通過(guò)curl訪問(wèn)報(bào)403問(wèn)題
今天生產(chǎn)環(huán)境遇到了一個(gè)問(wèn)題,在測(cè)試環(huán)境其他系統(tǒng)調(diào)用我們系統(tǒng)的一個(gè)接口沒(méi)問(wèn)題,在生產(chǎn)環(huán)境死活調(diào)不通
問(wèn)題描述
有業(yè)務(wù)人員反饋?zhàn)罱鼊偘l(fā)版的一個(gè)服務(wù)提供的接口,其他系統(tǒng)一直調(diào)用不通。
嘗試解決
分析
單體項(xiàng)目,系統(tǒng)部署架構(gòu)很簡(jiǎn)單,抽象一下如下圖所示:
經(jīng)過(guò)幾次嘗試有如下發(fā)現(xiàn):
- 瀏覽器上訪問(wèn)正常,不管是外網(wǎng)還是局域網(wǎng)
- 通過(guò)curl請(qǐng)求接口,請(qǐng)求tomcat地址正常,請(qǐng)求nginx地址返回403
- 其他系統(tǒng)通過(guò)通過(guò)nginx地址調(diào)用返回403,通過(guò)tomcat地址就正常
在網(wǎng)上找的解決方案
在網(wǎng)上搜索nginx配置動(dòng)態(tài)代理報(bào)403,一般搜到4種情況
1、由于啟動(dòng)用戶和 nginx 工作用戶不一致所致
對(duì)比nginx配置文件中的用戶與實(shí)際啟動(dòng)nginx用戶是否一致
# 查看實(shí)際啟動(dòng)用戶 ps -ef | grep nginx # 查看配置文件中配置的用戶 cat /usr/local/nginx/conf/nginx.conf
2、缺少 index.html 或者 index.php 文件,就是配置文件中 index index.html index.htm 這行中的指定的文件
查看root的配置目錄下是否有index.html等文件,沒(méi)有的話會(huì)報(bào)403
server { listen 80; server_name localhost; index index.html; root /data/www; }
3、權(quán)限問(wèn)題,如果 nginx 沒(méi)有 web 目錄的操作權(quán)限,也會(huì)出現(xiàn) 403 錯(cuò)誤
運(yùn)行nginx的用戶對(duì)root的配置目錄沒(méi)有讀寫權(quán)限
# 修改web目錄的讀寫權(quán)限,或者把nginx的啟動(dòng)用戶改成目錄的所屬用戶,或者將web目錄的所屬用戶改為nginx的啟動(dòng)用戶,重啟nginx即可 chmod -R 777 /data/www chown -R nginx:nginx /data/www
4、SELinux 設(shè)置為開(kāi)啟狀態(tài)(enabled)的原因
# 查看當(dāng)前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)過(guò)多方分析,發(fā)現(xiàn)配置目錄下多了一個(gè)配置/usr/local/nginx/conf/conf.d/agent_deny.config,內(nèi)容大概如下所示:
# 禁止Scrapy等工具的抓取 if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) { return 403; } # 禁止UA及UA為空的訪問(wèn) # 。。。 # 禁止非GET/POST方式的抓取 # 。。。
第一條就將curl和httpclient給禁用了,這也就解決了問(wèn)題描述里對(duì)方系統(tǒng)調(diào)用接口和使用curl調(diào)用nginx地址時(shí)調(diào)不通的原因了。
解決方法,最終提供兩個(gè)思路:
1、httpclient調(diào)用時(shí)修改User_Agent
2、直接調(diào)用tomcat接口
總結(jié)
遇到問(wèn)題多總結(jié),網(wǎng)上的答案不一定能解決你的問(wèn)題,還要具體問(wèn)題具體分析,多分析現(xiàn)象,根據(jù)現(xiàn)象找到蛛絲馬跡。
到此這篇關(guān)于Nginx配置動(dòng)態(tài)代理后通過(guò)curl訪問(wèn)報(bào)403問(wèn)題的文章就介紹到這了,更多相關(guān)Nginx動(dòng)態(tài)代理報(bào)403內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Prometheus 和 Grafana 通過(guò)nginx-exporter監(jiān)控nginx的
nginx-exporter 是 Prometheus 用來(lái)從 Nginx 收集指標(biāo)的組件,這篇文章給大家介紹Prometheus 和 Grafana 通過(guò)nginx-exporter監(jiān)控nginx的詳細(xì)步驟,感興趣的朋友跟隨小編一起看看吧2024-08-08Nginx七層負(fù)載均衡之動(dòng)靜分離思路詳解
Nginx動(dòng)靜分離簡(jiǎn)單來(lái)說(shuō)就是把動(dòng)態(tài)跟靜態(tài)請(qǐng)求分開(kāi),不能理解成只是單純的把動(dòng)態(tài)頁(yè)面和靜態(tài)頁(yè)面屋里分離,這篇文章主要介紹了Nginx七層負(fù)載均衡之動(dòng)靜分離思路詳解,需要的朋友可以參考下2024-02-02nginx多l(xiāng)ocation配置實(shí)例代碼
公司測(cè)試環(huán)境使用nginx部署多個(gè)前端項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于nginx多l(xiāng)ocation配置的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04一文了解nginx HTTP安全響應(yīng)問(wèn)題
一些網(wǎng)站系統(tǒng)會(huì)經(jīng)常遭到各類XSS攻擊、點(diǎn)劫持等,從而造成重要信息的泄露以及服務(wù)器安全問(wèn)題,本文就來(lái)介紹一下,感興趣的可以了解一下2023-11-11部署Nginx+Apache動(dòng)靜分離的實(shí)例詳解
Nginx不僅能作為Web服務(wù)器,還具有反向代理、負(fù)載均衡和緩存的功能,這篇文章主要介紹了部署Nginx+Apache動(dòng)靜分離的實(shí)例代碼,需要的朋友可以參考下2019-12-12nginx編譯安裝后對(duì)nginx進(jìn)行平滑升級(jí)的方法
nginx編譯安裝后用了一段時(shí)間后發(fā)現(xiàn)當(dāng)前版本有漏洞或需要新的功能時(shí)就需要對(duì)當(dāng)前nginx版本進(jìn)行版本升級(jí),所以這時(shí)就需到對(duì)nginx的平滑升級(jí),如何進(jìn)行平滑升級(jí),下面就一起來(lái)了解一下2018-12-12詳解nginx同一端口監(jiān)聽(tīng)多個(gè)域名和同時(shí)監(jiān)聽(tīng)http與https
這篇文章主要介紹了詳解nginx同一端口監(jiān)聽(tīng)多個(gè)域名和同時(shí)監(jiān)聽(tīng)http與https的相關(guān)資料,需要的朋友可以參考下2017-05-05