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

转载 2017年10月19日 15:21:57

返回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上的临时文件夹在那个地方,对应的权限是什么 ,不同环境的路径是不一样的

相关文章推荐

select项内容过长解决办法

  • 2010年04月20日 14:46
  • 2KB
  • 下载

SecureRandom生成随机数超慢 导致tomcat启动时间过长的解决办法

使用腾讯云的CentOS 7.2 CVM 服务器跑Tomcat时发现,Tomcat启动的特别慢,通过查看日志,发现时间主要花在实例化SecureRandom对象上了。由该日志可以看出,实例化该对象使用...
  • upshi
  • upshi
  • 2017年02月07日 10:57
  • 2733

TextView自动换行以及内容过长全部显示--终极解决办法

http://blog.csdn.net/wwzqj/article/details/8731859最近在写项目的时候要求内容过长加省略号或者是右边有箭头,点击显示全部内容,下方有想向上的箭头,点击底...

关于修改当前WiFi的账号和密码之后自动重连问题(不用在输入密码),重连时间过长问题的解决办法

我有一个这样的需求,手机连上一个设备发出的WiFi,然后通过手机端修改设备的WiFi账号和密码在进行重连。重连思路是这样的:修改SSID之后重连,那么密码是不变的;修改密码后重连那么账号时不变的,我是...

前后端分离。前端POST请求参数过长,导致400错误解决办法及分析

这两天做好的功能要上线了。但是测试的时候忽然发现当POST提交数据量多大时,会导致后端报400错误。最开始以为瓶颈存在于tomcat,因为tomcat默认能接受的POST请求大小为2M,所以手动修改t...

安卓log过长时查看办法

  • 2014年01月14日 16:30
  • 620B
  • 下载

文件名过长/文件夹路径过长,无法删除文件夹/文件的解决办法

原文链接: http://blog.csdn.net/ziyunlong1984/article/details/6201455#reply 今天在使用eclipse导入项目时...

IOS 返回JSON数据中存在NULL的解决办法

有些后台写的不好,返回数据的字段偶尔有NULL类型存在,如果不直接赋值给其他对象就会造成崩溃。解决办法的主要思路就是将其中的NULL对象转换为@”“空字符串。以下是封装好的方法创建一个字典的分类 ....

jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON解决办法

在WEB项目中,经常会使用到jQuery进行AJAX请求,但是自从使用了.net 3.5以后,以往写的请求语句就有些小问题了,就是返回的始终是xml,而并不是JSON,经过尝试,只需要在$.ajax中...
  • zsgit
  • zsgit
  • 2011年11月15日 11:14
  • 946
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:返回xml或json过长时被nginx截断的解决办法
举报原因:
原因补充:

(最多只允许输入30个字)