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 0
或 setsebool -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) 这几天真让我抓狂。预先感谢您的帮助。
看来这个问题很普遍。我建议您尝试以下步骤,看看是否能解决问题:
- 在 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)
使用 persistant
标志将 httpd 网络连接的 SELinux 布尔值切换为打开:
setsebool httpd_can_network_connect on -P
此外,我发现其中一些命令可能在修复 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
我正在使用 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 0
或 setsebool -P httpd_can_network_connect 1
.
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) 这几天真让我抓狂。预先感谢您的帮助。
看来这个问题很普遍。我建议您尝试以下步骤,看看是否能解决问题:
- 在 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)
使用
persistant
标志将 httpd 网络连接的 SELinux 布尔值切换为打开:setsebool httpd_can_network_connect on -P
此外,我发现其中一些命令可能在修复 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