nginx安装在root用户下的问题

我一个同事把nginx安装在root用户下了,结果导致我用IP访问正常,域名访问会出现数据不全的问题,还有一个现象是上传图片二进制流也会报这个错误,在网上查了好久终于查到原因了:
具体来说,是nginx工作机制的问题, 如果报下面的错误:

*105761 open() "/root/server/nginx/fastcgi_temp/3/02/0000000023" failed (13: Permission denied) while reading upstream, client: 172.20.146.204, server: localhost, request: "GET /admin/category/list?nav=3 HTTP/1.0", upstream: "
看起来是权限问题,要完全的解决这个问题,先要搞清楚 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 的作用就在于此。多出来的数据会被临时写入到文件中,放在这个目录下面。
显然,缓冲区设置的太小的话,Nginx 会频繁读写硬盘,对性能有很大的影响,但也不是越大越好,没意义,呵呵!

网上给的解决办法是:粗暴的删掉 fastcgi_temp 目录或者温柔的 chown + chmod 都可以解决问题
,但是我都试过了,都不行,最后才发现是我nginx启动的问题
首先停止nginx,如
sbin/nginx -s stop
给nginx root启动
chown -R root nginx
重新启动nginx,就可以了
这个只是对于安装在root用户下的,安装在其它用户目录下的,也要用相应的用户启动

猜你喜欢

转载自aiya-aiya.iteye.com/blog/2146978