读取上游时权限被拒绝

读取上游时权限被拒绝

我们已经在 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: x.x.x.x, 
  server: y.y.y.y, request: "GET /signup/procedures?count=0 HTTP/1.1", 
  upstream: "passenger:unix:/passenger_helper_server:", host: "y.y.y.y", 
  referrer: "http://y.y.y.y/signup/procedures"

答案1

我在 NGINX/PHP-FPM 设置(php-fpm=improved fcgi for php)上遇到了同样的问题。

您可以找出 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

答案2

您可能从用户开始root,然后更改了它。现在的问题是缓存文件夹,即

/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,因此您的nginxwww-data或您尝试切换到的)用户无法访问它们,因为他们拥有 的权限700

所以解决方案很简单。停止 nginx,然后:

rm -rf /var/cache/nginx/*

或者您发行版和发布版本上的路径。然后重新启动 nginx,它将使用适当的权限重新创建这些文件夹。

答案3

还要检查 nginx.conf 文件以确保您指定了正确的用户和组。

我遇到了一个问题,目录上的权限是为 username/nginx 设置的,但 nginx.conf 用户只指定了 username。默认情况下,如果没有为 user 指令指定组,则它使用与 user 相同的名称。因此,username/username 试图访问目录,而不是 username/nginx。更新配置解决了我的问题。

看:http://nginx.org/en/docs/ngx_core_module.html#user

答案4

从非特权帐户启动 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,则将临时文件直接放在缓存目录中。

相关内容