nginx导致的返回内容缺少

问题描述:

在个人电脑执行curl后返现接口仅返回部分内容,出参感觉被截取少了一部分;但是在服务所在机器上直接执却发现能返回完整信息

后来就了解到,个人电脑和服务器电脑的差别是是否走了nginx,所以出问题的地方可能是nginx

nginx的错误日志如下:

2024/04/16 11:43:41 [crit] 29434#0: *550562 open() "/opt/nginx/proxy_temp/1/29/0000000291" failed (13: Permission denied) while reading upstream, client: 10.14.168.15, server: 10.14.250.23, request: "GET /api/coursewareInfoByIdCnum?id=93f63bb7ecbc4c498b889fcfa90d7c37&cnum=19 HTTP/1.1", upstream: "http://127.0.0.1:11121/api/coursewareInfoByIdCnum?id=93f63bb7ecbc4c498b889fcfa90d7c37&cnum=19", host: "10.14.250.23"

然后查看nginx的配置发现,nginx进程对应的用户是普通用户beibo,路径/opt/nginx/proxy_temp是属于root用户的,

执行如下指令,将/opt/nginx/proxy_temp的所有者修改为beibo

sudo chown -R beibo /opt/nginx/proxy_temp

然后重新执行对应的curl,出参完整,解决问题。

原因分析:

nginx存在一个buffer的机制,在返回数据过大超出缓存区的最大容量时,会将数据写入临时文件,而此时如果安装nginx的用户权限对该目录没有权限,就会报没权限的问题,所以在返回数据时,超出缓存区的数据将丢失,出现截断。所以将nginx的目录赋予权限就可以了

参考:

nginx 返回数据被截断_nginx使网参数被自动截断-CSDN博客

https://blog.51cto.com/u_39037/10073798

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx正向代理返回400错误时,这意味着源服务器无法理解或处理客户端发送的请求。出现这种情况可能有以下几个原因: 1. 客户端请求格式错误:客户端发送的请求可能不符合HTTP协议的规范,例如缺少必要的请求头或请求方法不正确。在此情况下,客户端应该检查请求的正确性并进行修正。 2. 请求被源服务器拒绝:源服务器可能根据其自身的策略或安全设置拒绝了该请求。这可能是由于某些访问限制、身份验证失败、IP地址被封禁等原因。在此情况下,客户端可以联系服务器管理员以获取更多信息或解决方法。 3. 请求被nginx代理服务器拦截:nginx代理服务器也可以配置规则来拦截某些请求。如果代理服务器配置了某些过滤规则或访问限制,它可能会返回400错误。在此情况下,管理员可以检查代理服务器的配置文件,并根据需要进行调整。 为了解决这个问题,可以采取以下措施: 1. 检查请求的正确性:确保请求符合HTTP协议的规范,包括正确的请求方法、请求头和请求体等。 2. 检查源服务器设置:确认源服务器是否正常运行,并检查是否有任何访问限制或身份验证要求。 3. 检查代理服务器设置:检查nginx代理服务器的配置文件,确保没有任何规则或过滤器会导致请求被拦截或拒绝。 4. 联系服务器管理员:如果问题仍然存在,可以联系服务器管理员以获取更多帮助和支持。 需要注意的是,400错误是一个客户端错误,解决方法很大程度上取决于具体情况和配置。因此,我们需要针对具体情况进行细致的排除和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值