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


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

  • 相关阅读:
    Centos 6下使用cmake编译安装MariaDB
    mysql索引
    mysql基础指令知识
    git/github安装与使用教程
    Linux目录结构详解
    static关键字的作用(修饰类、方法、变量、静态块)
    Java中重载(overloading)和重写(Overriding)的区别
    @PropertySources和@ImportReSources注解
    @ConfigurationProperties注解和@Value注解的区别
    Java中数组的定义,初始化和使用
  • 原文地址:https://www.cnblogs.com/zdz8207/p/nginx-xml-content-length.html
Copyright © 2020-2023  润新知