我们已经在 Nginx 和乘客上部署了我们的 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"
Run Code Online (Sandbox Code Playgroud)
cmc*_*cmc 44
我在 NGINX/PHP-FPM 设置(php-fpm=improved fcgi for php)上遇到了同样的问题。
您可以找出 nginx 进程以哪个用户身份运行
ps aux | grep "nginx: worker process"
Run Code Online (Sandbox Code Playgroud)
然后检查您的代理文件中的权限是否正确
ls -l /opt/nginx/proxy_temp/
Run Code Online (Sandbox Code Playgroud)
在我的情况下,nginx 正在运行,www-data
并且我的代理目录中的两个目录属于 root。
我还不知道它是怎么发生的,但我通过执行(以 root 用户身份)修复了它
chown www-data.www-data /opt/nginx/proxy_temp
Run Code Online (Sandbox Code Playgroud)
bvi*_*tor 11
您可能从 user 开始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
Run Code Online (Sandbox Code Playgroud)
已由 拥有root
,因此您的nginx
(www-data
或您尝试切换到的任何对象)用户无法访问它们,因为他们拥有700
.
所以解决方法很简单。停止nginx,然后:
rm -rf /var/cache/nginx/*
Run Code Online (Sandbox Code Playgroud)
或无论您的发行版和发行版的路径如何。然后重新启动 nginx,这将使用适当的权限重新创建这些文件夹。
小智 8
还要检查 nginx.conf 文件以确保您指定了正确的用户和组。
我遇到了一个问题,即为用户名/nginx 设置了目录权限,但 nginx.conf 用户只指定了用户名。默认情况下,如果没有给 user 指令指定组,它使用与用户相同的名称。因此,用户名/用户名试图访问目录而不是用户名/nginx。更新配置解决了我的问题。
请参阅:http : //nginx.org/en/docs/ngx_core_module.html#user
小智 6
所以我做了上述所有事情,不幸的是,它给了我同样的错误。我正在使用 nginx 的 centos 6.7 机器上运行打包成带有扭矩盒的 jar 文件的 rails 应用程序。我为此奋斗了大约 3 个小时,直到找到了另一个解决方案,我希望它可以帮助其他人。根据这篇文章, nginx 可能会在强制模式下运行。我只是简单地将 nginx 更改为许可模式
setenforce 0
Run Code Online (Sandbox Code Playgroud)
这样,错误就消失了,我能够在暂存/生产环境中运行我的应用程序。
我一无所知,直到我在 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
Run Code Online (Sandbox Code Playgroud)
我真的希望这可以节省我刚刚失去的 3 个小时。
小智 -3
chmod 777 /opt/nginx/proxy_temp/
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,通过 chmod 到该目录解决了。