我正在尝试使用nginx连接CentOS 7上的uWSGI Flask应用程序,在/var/log/nginx/error.log中提供nginx错误日志:
2017/10/04 22:35:29 [crit] 24381#0: *54 connect() to unix:/var/www/html/CON29Application1/socket.sock failed
(13: Permission denied) while connecting to upstream, client: 80.44.138.51,
server: 188.226.174.121, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://unix:/var/www/html/CON29Application1/socket.sock:",
host: "188.226.174.121", referrer: "http://188.226.174.121/"
uWSGI错误日志显示我认为uWSGI正确运行:
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x1a1ebd0 pid: 26364 (default app)
这是我在Linux上的第一次部署,但请阅读另一个SO答案:Nginx can't access a uWSGI unix socket on CentOS 7 这家伙回答了他自己的问题,并提到SE Linux上的博客文章http://axilleas.me/en/blog/2013/selinux-policy-for-nginx-and-gitlab-unix-socket-in-fedora-19/,说SE Linux就是问题所在。我真的不明白SE Linux上运行的是什么,解决方案似乎涉及在nginx audit.log中改变“AVC”消息,我正在进入我的脑海!
正如博客文章所提到的那样,我确实在/var/log/audit/audit.log上提到了拒绝写入和nginx的AVC消息:
type=AVC msg=audit(1507153878.777:559609): avc: denied { write } for pid=24381
comm="nginx" name="socket.sock" dev="vda1" ino=715975
scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=sock_file
但作为一个新手,是否有一些更简单或许我做错了,可以修复chmod权限或chown?谢谢任何想法。 套接字权限:
ls -l socket.sock
srwxrwxrwx. 1 will nginx 0 Oct 4 17:02 socket.sock
答案 0 :(得分:0)
好吧,我的SELinux设置最终确实有所作为,改变这个让我的网络应用程序真正起作用!我查看了另一个教程:https://www.digitalocean.com/community/tutorials/an-introduction-to-selinux-on-centos-7-part-1-basic-concepts
我必须从Linux新手的角度说,我已经看过其他一些帖子,提到Digital Ocean的教程有多好(我当然不会与他们有任何联系) ..)。
对于阅读此内容的其他新手来说,SELinux代表安全增强型Linux,现在显然包括许多Linux发行版,包括CentOS 7.它可以增加某种安全性。我运行了他们在此页面上列出的最简单的命令:getenforce
哪个输出
enforcing
正如数字海洋教程所述," SELinux目前应该被禁用",我的不知道 - 不知道为什么,我没有触及SELinux的任何东西,因为不知道它是什么直到2天前。
无论如何,尝试最简单的修复,正如他们的建议所做的那样:
vi /etc/sysconfig/selinux
或者实际上我认为我没有权限以我的用户身份执行此操作,必须以root身份执行此操作:
sudo vi /etc/sysconfig/selinux
此文件中实际上只有2个设置。所以重置:
SELINUX=permissive
然后尝试reboot
作为他们重新启动服务器的建议,所以很明显SE Linux将开始记录一些安全mumbo jumbo的东西,即我认为这意味着它记录安全booboos和人们入侵系统而不是阻止他们。重新启动然后问我云端口密码,我认为必须是我的sudo密码,它不是,然后在尝试这几次后崩溃,所以重新启动它我认为这是重启是吗?我的网站现在有效。
正如我在这里提到的另一篇文章,我认为这意味着SELinux会在设置为enforcing
时阻止nginx运行。但是对于新手而言,这里的另一篇文章似乎有点复杂,而不是像我在这里所做的那样改变一个设置,更有可能产生更多问题。如果我可以进一步开发这个或另一个应用程序,我认为需要找到具有更多Linux经验的人。