nginx报错/usr/local/nginx/fastcgi_temp/2/00/0000000002" failed (13: Permission denied)

1333人浏览 / 0人评论

今天线上突然出现了部分栏目加载不出来!慌的一批,都已经想好怎么甩锅了!

后来我查看了下日志出现了一下内容:

很好,泡米森弟奈他!    基本就已经知道怎么回事了!

二话不说 上去我就: ps -ef|grep php     ps-ef|grep nginx

查看下运行的用户是否一致,结果是一致的;

但是我又 ll -d /usr/local/nginx/fastcgi_temp/ 发现权限出现了问题;

最终:chmod -R 777  /usr/local/nginx/fastcgi_temp/   问题解决了

---------------

不建议给777的,可以先644试试,或者755!

----------------

问题出现的原因:

但是,为什么会「导出当前页」能正常导出而「导出全部」就失败呢?刨根问底得去查 参考资料 找到解释:

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

Nginx 默认配置如下:

1
2
fastcgi_buffers      8 4/8K;
fastcgi_buffer_size  4K;

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

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

也就是说,当前几台服务器上的站点,一旦响应的数据超过 36 KB 超出的部分将写到 fastcgi_temp 目录,如果 fastcgi_temp 不可写的话将只返回前 36 KB 的内容,难怪手动将分页条数参数给到 1000 页面不完整。

-----

链接地址:https://blog.wangmao.me/nginx-fastcgi-buffers.html

全部评论