我们已经在nginx和passenger上部署了我们的rails应用程序。应用程序间歇地加载页面部分。应用程序日志中没有错误。但nginx错误日志显示如下:
2011/02/14 05:49:34 [crit] 25389#0: *645 open() "/opt/nginx/proxy_temp/2/02/0000000022" failed (13: Permission denied) while reading upstream, client: xxxx, server: yyyy, request: "GET /signup/procedures?count=0 HTTP/1.1", upstream: "passenger:unix:/passenger_helper_server:", host: "yyyy", referrer: "http://yyyy/signup/procedures"
我在NGINX / PHP-FPM设置(php-fpm = php的改进fcgi)上遇到同样的问题。
你可以找出nginx进程运行的是哪个用户
ps aux | grep "nginx: worker process"
然后检查您的代理文件中的权限是否正确
ls -l /opt/nginx/proxy_temp/
在我的情况下,nginx运行的是www-data
而我的代理目录中的两个目录属于root。
我不知道它是怎么发生的,但我通过做(固定)
chown www-data.www-data /opt/nginx/proxy_temp
还要检查nginx.conf文件,确保你指定了正确的用户和组。
我有一个目录权限设置为用户名/ nginx的问题,但是nginx.conf用户只能指定用户名。 默认情况下,如果没有给用户指令组,它将使用与用户相同的名称。 所以,用户名/用户名正在尝试访问一个目录,而不是用户名/ nginx。 更新configuration解决了我的问题。
请参阅: http : //nginx.org/en/docs/ngx_core_module.html#user
你可能从root用户开始,然后改变它。 现在的问题是,caching文件夹,即
/var/cache/nginx/client_temp /var/cache/nginx/fastcgi_temp /var/cache/nginx/proxy_temp /var/cache/nginx/scgi_temp /var/cache/nginx/uwsgi_temp
已经由root拥有,所以你的nginx(或任何你试图切换到)用户不能访问它们,因为他们有700的许可。
所以解决scheme很简单。 停止nginx,然后:
rm -rf /var/cache/nginx/*
或者你的发行版和释放path。 然后重新启动nginx,它将用适当的权限重新创build这些文件夹。
从非特权帐户启动nginx时, use_temp_path=off
。
proxy_cache_path ... use_temp_path=off;
这需要避免nginx尝试将文件放入默认的proxy_temp_path
。 从nginx文档:
临时文件的目录是根据use_temp_path参数(1.7.10)设置的。 如果省略此参数或将其设置为on,则将使用proxy_temp_path指令为给定位置设置的目录。 如果该值设置为off,临时文件将直接放入caching目录中。
所以我做了以上所有的不幸的是,这给了我同样的错误。 我运行一个rails应用程序打包到一个jar文件与torquebox在一个centos 6.7机器与nginx。 我作了大约3个小时的斗争,直到我find了另一个解决scheme,我希望它可以帮助别人。 根据这篇文章, nginx可以运行在强制模式下。 我只是简单地把nginx改成了permissive模式
setenforce 0
由此,错误消失了,我能够在分段/生产环境中运行我的应用程序。
直到我在audit.log上发现错误,我才无能为力
type=AVC msg=audit(1444454198.438:466): avc: denied { name_connect } for pid=3201 comm="nginx" dest=8080 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_cache_port_t:s0 tclass=tcp_socket
我真的希望这能节省一个我刚刚失去的3小时的时间。
chmod 777 /opt/nginx/proxy_temp/
我有同样的问题,并通过chmod解决该目录。