前段时间把程序员的wordpress升级到3.5.1,本身如果没有特别的插件,在后台更新就能完成。 更新完成后在后台发布文章,编辑器不能点击可视化标签,只能显示html标签,看了下js控制台提示ReferenceError: tinyMCE is not defined 3.5。 直觉以为升级哪里有问题,简单粗暴的重装了,可是还是不行,这时候就觉得可能是nginx哪里配置的问题了。 查看了一下日志文件,发现有下面的错误提示:
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" 首先确认工作进程(worker process)的用户: 检查配置文件nginx.conf的user指令 user www-data; 后者执行命令 #ps aux | grep "nginx: worker process" | awk '{print $1}' www-data 都可以得到nginx工作进程的运行用户
检查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_temp_file_write_size上,当你的文件超过该参数设置的大小时,nginx会先将文件写入临时目录(缺省为nginx安装目下/proxy_temp目录), 如果nginx对prxoy_temp没有权限就会写不进去,结果就是只显示部分页面。 我遇到这个案例用工具查看了一下,post-new.php这个页面大小事94,超过了64k就要符合我们上面的分析。 (责任编辑:IT) |