首页 存档 技术 查看内容

Nginx 代理返回部分数据的问题

2018-3-30 13:00 |来自: 互联网 788 0

摘要: (点击上方公众号,可快速关注) 来源:LinuxToday 链接:www.linuxde.net/2013/08/15169.html A服务器 代理 B服务器的内容,但发现用户访问A服务器只能获取到部分内容。 检查几个问题: 1 直接访问B服务器, ...

(点击上方公众号,可快速关注)


来源:LinuxToday

链接:www.linuxde.net/2013/08/15169.html


A服务器 代理 B服务器的内容,但发现用户访问A服务器只能获取到部分内容。


检查几个问题:


1 直接访问B服务器,正常

2 访问非PHP内容,正常

3 关闭压缩也没有解决问题,与压缩无关


试过 gzip和gunzip的功能,都没有解决,不过这两个跟缓存压缩数据有帮助哦


后来查得两篇文章,解决了,是 fastcgi_temp 目录的读写权限问题。表现症状:Nginx的错误日志出现大量类似如下的错误:


2013/08/25 00:41:28 [crit] 32763#0: *5439 open() "/Data/apps/nginx/fastcgi_temp/5/02/0000000025" failed (13: Permission denied) whil

e reading upstream, client: 203.171.237.2, server: www.aslibra.com, request: "GET /thread.html HTTP/1.0", upstream: "f

astcgi://127.0.0.1:9000", host: "www.aslibra.com", referrer: "http://www.aslibra.com/f.html"


参考文章里的解决方式:


从这句判断 可能是 生成的文件过大 要以 文件的形式存放 然后 nginx 有没有权限读取造成.于是 chmod -R 764 /usr/local/nginx/fastcgi_temp/ 问题解决.


参考之二:fastcgi_temp 目录的作用


先简单的说一下 Nginx 的 buffer 机制,对于来自 FastCGI Server 的 Response,Nginx 将其缓冲到内存中,然后依次发送到客户端浏览器。缓冲区的大小由 fastcgi_buffers 和 fastcgi_buffer_size 两个值控制。


比如如下配置:


fastcgi_buffers 8 4K;

fastcgi_buffer_size 4K;


fastcgi_buffers 控制 nginx 最多创建 8 个大小为 4K 的缓冲区,而 fastcgi_buffer_size 则是处理 Response 时第一个缓冲区的大小,不包含在前者中。所以总计能创建的最大内存缓冲区大小是 8*4K 4K = 36k。而这些缓冲区是根据实际的 Response 大小动态生成的,并不是一次性创建的。比如一个 8K 的页面,Nginx 会创建 2*4K 共 2 个 buffers。


当 Response 小于等于 36k 时,所有数据当然全部在内存中处理。如果 Response 大于 36k 呢?fastcgi_temp 的作用就在于此。多出来的数据会被临时写入到文件中,放在这个目录下面。


内存中缓冲了 36Kb,剩下的会写入的文件中。而实际的情况是,运行 Nginx Process 的用户并没有 fastcgi_temp 目录的写权限,于是剩下的数据就丢失掉了。


解决方法就比较简单了,粗暴的删掉 fastcgi_temp 目录或者温柔的 chown chmod 都可以解决问题



今日微信公号推荐↓】

更多推荐请看 声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除


路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部