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

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

返回xml过长时被nginx截断的解决办法 问题描述: 通过网页获取数据,数据格式为xml。当xml比较短时,可以正常获取数据。但是xml长度过长时不能正常获取数据,通过观察返回数据的源代码,...
  • e_wsq
  • e_wsq
  • 2017年10月19日 15:21
  • 530

解决ASP.NET 请求数据太大500错误 JSON无法反序列化

当向服务端提交请求时(ajax)post数据非常大的情况下,post数据中有超过450个对象的数组时,请求会返回错误信息:JSON无法反序列化 解决方法: 方案一:可以在配置文件web.con...
  • tianyinlove
  • tianyinlove
  • 2016年10月24日 19:06
  • 2393

记录一次解决PHP返回数据被nginx截断的问题

前言今日,发生了一件懵逼的事情,通过内部接口获取数据的时候,概率性出现返回的数据被截断的问题。内部接口好好的为何突然出现问题了?此文将记录这次本应该很快解决却没有很快解决的过程。正文背景内部接口分为5...
  • u011957758
  • u011957758
  • 2017年08月01日 02:05
  • 674

PHP返回数据被nginx截断问题的解决方法

出现的问题现象: 1 直接在命令行运行php脚本返回数据正常 2 通过nginx访问返回数据被截断 经过排查是fastcgi_temp目录的读写权限问题,Nginx的错误日志出现大量...
  • pangchengyong0724
  • pangchengyong0724
  • 2016年07月29日 09:38
  • 941

C# JavaScriptSerializer报错,json数据太长

ASP.NET平台中,用JavaScriptSerializer将返回的数据序列化,若返回的数据非常大,则可能会报如下错误: Exception information: Exception ty...
  • wangshaner1
  • wangshaner1
  • 2015年05月13日 15:32
  • 2200

使用base64 对Json 的返回数据进行优化

1,关于json做移动开发的时候用的最多的就是json。给客户端传送数据。 但是遇到一个问题,比如用户信息的json。{ "uid":1234, "name":"zhang san"...
  • freewebsys
  • freewebsys
  • 2016年10月27日 21:10
  • 3118

PHP返回内容过长时被nginx截断的解决办法

查看了html源代码,发现html源代码被截断了。因此,导致网页内容显示不全。 之后的整个分析过程绕了一大圈,即是tcpdump,又是用tcpflow进行网络包分析。最后,还是从nginx的错误日志...
  • SakuraLLj
  • SakuraLLj
  • 2016年07月04日 18:25
  • 1728

nginx代理出现数据被截断的问题

nginx反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客...
  • qinzhen2607517
  • qinzhen2607517
  • 2016年04月13日 16:35
  • 1616

Retrofit2 结合 Rxjava 解决返回的 JSON

Retrofit2 结合 Rxjava 解决返回的 JSON
  • u014608640
  • u014608640
  • 2016年11月08日 10:58
  • 4619

SpringMVC返回json数据的三种方式

1、第一种方式是spring2时代的产物,也就是每个json视图controller配置一个Jsoniew。 如:  或者 同样要用jackson的jar包。 2、第二种使用JSON工具将对象序列...
  • shan9liang
  • shan9liang
  • 2014年12月30日 09:02
  • 252671
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:返回xml或json过长时被nginx截断的解决办法
举报原因:
原因补充:

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