记一次Referer踩坑过程,浏览器访问接口Nginx返回404,postman和curl访问接口正常。

本文记录了一次因Nginx配置导致的接口404错误的解决过程。首先怀疑是Nginx路径配置错误,但Postman和curl访问返回200。接着发现接口参数缺失时会报404,猜测参数与请求路径有关。通过开启Nginx详细日志,发现关键在于User-Agent和Referer。最终发现是Nginx配置限制了Referer,修改配置后问题解决。
摘要由CSDN通过智能技术生成

背景

硬件厂商提供了一个平台,我们只能在内网才能访问此平台,所以我们需要经过层层服务器Nginx转发才能访问到。但是呢,当我们在浏览器输入平台地址时,页面可以正常访问,但是接口却报404,记录一次踩坑过程。

猜想

1.接口报404,第一猜想是Nginx路径配置错误,但是页面可以正常访问,所以我用postman和curl命令访问了接口却返回200,一脸懵逼。

2.在尝试调用接口的时候,我意外发现如果不传请求参数不是报其它错误而是接口会报404,可能是因为它那所有接口都是指向一个地址,接口参数包含了具体请求路径。第二猜想难道是浏览器访问接口参数没有传过去,看了一下请求头和js文件,没有发现什么问题。

3.准备把本地Nginx详细日志打开,这样就可以看到详细信息了。

log_format access '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent $request_body "$http_referer" "$http_user_agent" $http_x_forwarded_for';
access_log logs/test.access.log access;

4.重启Nginx后,重新用浏览器、postman、curl命令访问接口,查看日志后发现请求参数都是一样的,不一样的是User-Agent、Referer。

5.开始使用curl命令伪造User-Agent,接口正常返回200。

6.继续使用curl命令伪造Referer,接口返回404了,恍然大悟,原来别人Nginx配置限制了Referer,我只是有点好奇,为啥不是返回403而是404。

7.修改Nginx配置,伪造Referer为空即可。

proxy_set_header referer '';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值