加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

返回xml或json过长时被nginx截断的解决办法

发布时间:2020-12-16 08:09:01 所属栏目:百科 来源:网络整理
导读:返回xml过长时被nginx截断的解决办法 问题描述: 通过网页获取数据,数据格式为xml。当xml比较短时,可以正常获取数据。但是xml长度过长时不能正常获取数据,通过观察返回数据的源代码,发现xml被截断了。 服务器环境:CentOS 6.5,Nginx 1.0.15,PHP 5.3.3

返回xml过长时被nginx截断的解决办法

问题描述:
通过网页获取数据,数据格式为xml。当xml比较短时,可以正常获取数据。但是xml长度过长时不能正常获取数据,通过观察返回数据的源代码,发现xml被截断了。

服务器环境:CentOS 6.5,Nginx 1.0.15,PHP 5.3.3

解决方法:
对比发现,使用apache代替nginx的时候可以正常获取长的xml数据。确定问题出现在nginx的配置上。
查看ngnix日志(yum安装默认目录:/var/log/nginx/)发现问题所在。
"/var/lib/nginx/tmp/fastcgi/1/01/0000000011"failed (13: Permission denied) while reading upstream,client: 192.16 8.56.1,server:,request:"GET /index.php?param=****** HTTP/1.1",upstream:"fastcgi://127.0 .0.1:9000",host:"centos.ctrip.dev:8001"

问题出现在此时nginx临时向/var/lib/nginx/tmp/目录下写入了临时数据,而执行nginx的用户没有该目录的写入权限。
解决该权限问题后问题解决。

另外php.ini nginx 对请求大小的配置也可能有影响,HTTP协议中使用Content-Length这个头来告知数据的长度。

===================================

过PHP请求接口时发现接口的内容输出没有完整的返回整个数据,早上只修改了nginx api_metrics插件里的计算response大小的代码,观察日志发现一条:
"/usr/local/nginx/proxy_temp/8/00/0000000008" failed (13: Permission denied) while reading upstream,client: 59.***.**.***,server: ******.banckle.com,request: "GET /livechat/livechat-backend.do HTTP/1.1",upstream: "http://127.0.0.1:8084/livechat/livechat-backend.do",host: "******.banckle.com"

该目录无法被nginx的nobody账户访问,那就设置权限:
sudo chown -R nobody:nobody /usr/local/nginx/proxy_temp/
刷新浏览器,一切正常。

出现这个问题的原因是nginx里对于小的反向代理请求是使用内存作中转,对于稍微大一点的,是使用文件系统来做中转。
然后之前调试nginx插件的时候,为了方便访问日志等数据就在root下调试的,部分子目录被nginx删除后重建,owner变了,所以正式的nginx反而不能访问了。

PS:要先用命令查一下50上的临时文件夹在那个地方,对应的权限是什么 ,不同环境的路径是不一样的

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读