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

nginx connet to .sock failed (13:Permission denied) - 502 bad gateway

我正在使用 nginx + uwsgi + django 在 centos7 上部署我的第一个站点。他们在测试中分别工作得很好,但我有一个 502 错误的网关试图将它们连接在一起。 /var/log/nginx/error.log 文件说

2020/12/29 15:52:05 [crit] 1150#0: *1 connect() to unix:/run/uwsgi/site.sock failed (13: Permission denied) while connecting to upstream, client: IPaddress, server: mysite.com, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/run/uwsgi/site.sock:", host: "IPaddress"

我已经尝试过这些,但是 none 设法解决了问题:

1.moving 将 site.sock 文件从我的项目基目录到 /tmp/site.sock,或者根据 this tutorial,到 /run/uwsgi/site.sock.

2.changing site.sock 文件权限从664改为666.

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

4.running nginx 和 uwsgi 通过在 nginx.conf 中设置 user = www-data 和 site_uwsgi.ini 中的 uid = www-data,pid = www-data 来使用 www-data 用户.

5.turning 通过 setenforce 0setsebool -P httpd_can_network_connect 1.

关闭 selinux

ps aux | grep nginx:

root      1148  0.0  0.0  39296  1972 ?        Ss   15:41   0:00 nginx: master process /usr/sbin/nginx
nginx     1150  0.0  0.1  39640  2056 ?        S    15:41   0:00 nginx: worker process

ps aux | grep uwsgi:

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

ls -l site.sock

srw-rw-rw-. 1 hanys nginx 0 12月 29 16:40 /run/uwsgi/oligoweb.sock

那个(13: Permission denied) 这几天真让我抓狂。预先感谢您的帮助。

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

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

user nginx; # Default Nginx user

nginx 更改为您当前用户的名称 - 在这里,David 是我当前的用户名。

user David; # Run Nginx as David's permissions (as username of the current logged in user)

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

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

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | 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