在上游阅读时拒绝访问

我们已经在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解决该目录。