问题描述:
通过网页获取数据,数据格式为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上的临时文件夹在那个地方,对应的权限是什么 ,不同环境的路径是不一样的
原文链接:https://www.f2er.com/xml/293682.html