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 都可以解决问题

参考文章:

nginx 的诡异问题...
分析 fastcgi_temp 错误以及 Nginx 的 Buffer 机制


原创内容如转载请注明:来自 阿权的书房
收藏本文到网摘
Health and Safety Writing Services Homepage Email
2020/07/03 12:10
Professional Health and Safety Writing Services is very popular for students in search of healthcare and safety research paper writing services and health and safety essay writing services.
天津百叶窗 Homepage
2013/09/15 11:38
问题确实很严重呀
分页: 1/1 第一页 1 最后页
发表评论
AD
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML 打开UBB 打开表情 隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

 

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐