Nginx(13:权限被拒绝)连接到上游

问题描述 投票:0回答:5

我正在 VPS 上部署 Djano 应用程序,并按照以下链接中的步骤使用 Gunicorn 和 Nginx 配置我的应用程序。

如何在 Ubuntu 16.04 上使用 Postgres、Nginx 和 Gunicorn 设置 Django

本教程一切顺利(gunicorn 和 nginx 正在运行),但问题是,当我通过静态 IP 访问 VPS 时,它会显示一个始终在重新加载的白屏。

检查 nginx 日志后,我发现以下内容:

(13:权限被拒绝)连接到上游时,客户端:,服务器:,请求:“GET / HTTP/1.1,上游:“http://unix:/root/myproject/myproject.sock:/”,主持人:“”,推荐人:“http:///”

django nginx gunicorn
5个回答
26
投票

经过大约7个小时的搜索,我终于在Nginx论坛找到了这个问题的解决方案:

Nginx 连接到 .sock 失败(13:权限被拒绝)- 502 错误网关

我所做的只是更改

/etc/nginx/nginx.conf
文件中第一行的用户名。

在我的例子中,默认用户是

www-data
,我将其更改为我的
root
机器用户名。


1
投票

我遇到了类似的问题。问题原来是小事,需要把目录权限改为755

chmod 755 /path/to/Project

0
投票

nginx.conf 文件的顶部是一个用户名(user nginx;)。只需将此用户添加到您的站点或项目所在的同一组中即可。 www-data 或任何数据都是您的。对不起英语。


0
投票

我刚刚在我的系统中创建了新用户并将项目所有权授予该用户,然后在我的 /etc/nginx/nginx.conf 中我将用户标记为我创建的用户


0
投票

发布完全不同的解决方案,以防有人遇到具有相同症状的不同问题。就我而言,我在启用了安全增强型 Linux 的 RHEL 上运行。

SELinux 可以阻止 Nginx 访问套接字,即使文件系统权限看起来正确。要检查 SELinux 是否是罪魁祸首,请暂时将其置于宽松模式:

sudo set enforce 0

有效果吗? 如果是这样,您可能想要破例。

记得回复!

sudo setenforce 1

Red Hat 有一个关于创建 SELinux 策略的教程(RHEL 文档)

这有点捷径——如果您尝试启动 Nginx 并且它被拒绝访问 Gunicorn 套接字,那么该拒绝将被记录在审核日志中。您可以使用这些日志生成自定义 SELinux 策略模块:

sudo grep gunicorn /var/log/audit/audit.log | sudo audit2allow -M nginx_gunicorn

查看套接字的上下文,

ls -lZ /run/gunicorn.sock
我看到:

system_u:object_r:var_run_t:s0

对于 nginx,

ps -eZ | grep nginx
:

系统_u:系统_r:httpd_t:s0

注意上下文中的 var_run_thttpd_t

cat nginx_gunicorn.te
显示策略,它可能应该包含允许两个上下文交互的内容。

允许httpd_t var_run_t:sock_file写入;

在向 SELinux 守护者祈祷的同时,您可以尝试启用该策略。

sudo semodule -i nginx_gunicorn.pp
sudo systemctl restart nginx

**如果这不起作用,您可以尝试在审计日志中搜索 nginx 的 Holy Grep 咒语的变体。首先,禁用您添加的策略,然后再次创建并启用。

sudo semodule -r nginx_gunicorn
sudo grep nginx /var/log/audit/audit.log | sudo audit2allow -M nginx_gunicorn
sudo semodule -i nginx_gunicorn.pp

祝你顺利。

© www.soinside.com 2019 - 2024. All rights reserved.