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

Qua*_*lin 2 django nginx uwsgi

我正在使用 nginx + uwsgi + django 在 centos7 上部署我的第一个站点。它们在测试中单独工作得很好,但我在尝试将它们连接在一起时遇到了 502 bad gateway。/var/log/nginx/error.log 文件显示

\n
\n

2020/12/29 15:52:05 [crit] 1150#0: *1 connect() 到 unix:/run/uwsgi/site.sock 在连接到上游时失败(13:权限被拒绝),客户端:IP 地址,服务器:mysite.com,请求:“GET / HTTP/1.1”,上游:“uwsgi://unix:/run/uwsgi/site.sock:”,主机:“IPaddress”

\n
\n

我已经尝试过这些,但没有一个能够解决问题:

\n

1.将 site.sock 文件从我的项目基目录移动到 /tmp/site.sock,或者根据本教程,移动到 /run/uwsgi/site.sock。

\n

2.将site.sock文件权限从664更改为666。

\n

3.chown套接字文件到myuser:nginx,并将myuser添加到nginx组。

\n

user = www-data4.通过在 nginx.conf 和uid = www-datasite_uwsgi.ini中进行设置,使用 www-data 用户运行 nginx 和 uwsgi pid = www-data

\n

setenforce 05.通过或关闭selinux setsebool -P httpd_can_network_connect 1

\n

ps aux | grep nginx:

\n
root      1148  0.0  0.0  39296  1972 ?        Ss   15:41   0:00 nginx: master process /usr/sbin/nginx\nnginx     1150  0.0  0.1  39640  2056 ?        S    15:41   0:00 nginx: worker process\n
Run Code Online (Sandbox Code Playgroud)\n

ps aux | grep uwsgi:

\n
root      1322  0.0  0.1  54680  3068 ?        Ss   15:49   0:00 /home/hanys/.virtualenvs/oligoweb/bin/uwsgi --emperor /etc/uwsgi/sites\nhanys     1390  0.0  1.6 261668 34324 ?        S    16:40   0:00 /home/hanys/.virtualenvs/oligoweb/bin/uwsgi --ini oligo_uwsgi.ini\nhanys     1392  0.0  1.2 261668 26528 ?        S    16:40   0:00 /home/hanys/.virtualenvs/oligoweb/bin/uwsgi --ini oligo_uwsgi.ini\nhanys     1393  0.0  1.2 261668 26528 ?        S    16:40   0:00 /home/hanys/.virtualenvs/oligoweb/bin/uwsgi --ini oligo_uwsgi.ini\nhanys     1394  0.0  1.2 261668 26528 ?        S    16:40   0:00 /home/hanys/.virtualenvs/oligoweb/bin/uwsgi --ini oligo_uwsgi.ini\nhanys     1395  0.0  1.2 261668 26528 ?        S    16:40   0:00 /home/hanys/.virtualenvs/oligoweb/bin/uwsgi --ini oligo_uwsgi.ini\nhanys     1396  0.0  1.2 261668 26528 ?        S    16:40   0:00 /home/hanys/.virtualenvs/oligoweb/bin/uwsgi --ini oligo_uwsgi.ini\nhanys     1397  0.0  1.2 261668 26528 ?        S    16:40   0:00 /home/hanys/.virtualenvs/oligoweb/bin/uwsgi --ini oligo_uwsgi.ini\nhanys     1398  0.0  1.2 261668 26528 ?        S    16:40   0:00 /home/hanys/.virtualenvs/oligoweb/bin/uwsgi --ini oligo_uwsgi.ini\nhanys     1399  0.0  1.2 261668 26528 ?        S    16:40   0:00 /home/hanys/.virtualenvs/oligoweb/bin/uwsgi --ini oligo_uwsgi.ini\nhanys     1400  0.0  1.2 261668 26528 ?        S    16:40   0:00 /home/hanys/.virtualenvs/oligoweb/bin/uwsgi --ini oligo_uwsgi.ini\nhanys     1401  0.0  1.2 261668 26528 ?        S    16:40   0:00 /home/hanys/.virtualenvs/oligoweb/bin/uwsgi --ini oligo_uwsgi.ini\n
Run Code Online (Sandbox Code Playgroud)\n

ls -l site.sock

\n
srw-rw-rw-. 1 hanys nginx 0 12\xe6\x9c\x88 29 16:40 /run/uwsgi/oligoweb.sock\n
Run Code Online (Sandbox Code Playgroud)\n

这几天(13:权限被拒绝)真的让我抓狂。预先感谢您的任何帮助。

\n

小智 7

看来这个问题很常见。我建议您尝试以下步骤,看看是否可以解决问题:

  1. 在 nginx.conf 文件中,默认情况下,用户 nginx 定义在 nginx.conf 文件的最顶部,如下所示;

用户 nginx;# 默认 Nginx 用户

更改nginx为您当前用户的名称 - 此处,David 是我当前的用户名。

用户大卫;# 以 David 的权限运行 Nginx(作为当前登录用户的用户名)

  1. 使用以下标志将 httpd 网络连接的 SELinux 布尔值切换为打开persistantsetsebool httpd_can_network_connect on -P

  2. 另外,我发现其中一些命令在修复 SELinux 时可能会派上用场:

sudo cat /var/log/audit/audit.log | sudo cat /var/log/audit/audit.log | grep nginx | grep 拒绝 | audit2allow -M mynginx sudo semodule -i mynginx.pp

参考:

http://blog.frag-gustav.de/2013/07/21/nginx-selinux-me-mad/

https://wiki.gentoo.org/wiki/SELinux/Tutorials/Where_to_find_SELinux_permission_denial_details

http://wiki.gentoo.org/wiki/SELinux/Tutorials/Managing_network_port_labels

http://www.linuxproblems.org/wiki/Selinux