nginx 出现 13: Permission denied
查看 nginx 的 error_log
查看了一下日志文件,发现有下面的错误提示:
2013/03/13 01:22:17 [crit] 3331#0: *10 open() "/usr/local/lnmp/nginx/fastcgi_temp/3/00/0000000003" failed (13: Permission denied) while reading upstream, client: 124.42.13.230, server: 264.cn, request: "GET /wp-admin/load-scripts.php?c=0&load%5B%5D=jquery,utils,plupload,plupload-html5,plupload-flash,plupload-silverlight,plupload-html4,json2&ver=3.5.1 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "264.cn", referrer: "http://www.nginx.cn/wp-admin/post-new.php"很明浏览器只加载了部分页面,原因是Permission denied。
1、首先确认工作进程(worker process)的用户:
检查配置文件nginx.conf的user指令
user www-data;
后者执行命令
ps aux | grep "nginx: worker process" | awk '{print $1}'
www-data
都可以得到nginx工作进程的运行用户
2、检查nginx的proxy_temp目录的所有者,
drwx------ 2 root root 4096 Mar 3 03:28 proxy_temp
可以看到proxy_temp的所有者不是www-data,修改目录所有者为www-data即可。
chown -R www-data:www-data proxy_temp
通过以上的步骤,wordpress就可以正常的显示,不会出现后台的js错误了。
分析下failed (13: Permission denied) while reading upstream问题的原因
首先看一下nginx 反向代理参数说明
proxy_connect_timeout 600; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 600; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_send_timeout 600; #后端服务器数据回传时间(代理发送超时)
proxy_buffer_size 32k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
问题就出在proxy_temp_file_write_size上,当你的文件超过该参数设置的大小时,nginx会先将文件写入临时目录(缺省为nginx安装目下/proxy_temp目录),
** 如果nginx对prxoy_temp没有权限就会写不进去,结果就是只显示部分页面。**
我遇到这个案例用工具查看了一下,post-new.php这个页面大小事94,超过了64k就要符合我们上面的分析。