在Systemd中使用Gunicorn套接字的Centos 7上的Nginx权限问题

时间:2018-03-15 10:06:26

标签: nginx flask centos gunicorn digital-ocean

我们搜索了无数线程来解决这个问题,但似乎没有一个对我们有用。 任何人都可以帮我解决这个nginx权限问题吗? 我已经按照本文的建议安装了非root用户。

How To Serve Flask Applications with Gunicorn and Nginx on CentOS 7

但是,我们永远无法访问套接字和静态文件。

tail -f /var/log/nginx/error.log获取,访问套接字时始终会产生 502 Bad Gateway Error

*5 connect() to unix:/home/devops/article-prod/articles.sock failed (13: Permission denied)

在访问静态文件时生成 403 Forbidden Error

*14 open() "/home/devops/article-prod/assets/icons/types/article.png" failed (13: Permission denied)

以下是我们的权限路径

/home/devops/article-prod/
/home/devops/article-prod/articles.sock
/home/devops/article-prod/assets
/home/devops/article-prod/assets/icons
/home/devops/article-prod/assets/icons/types
/home/devops/article-prod/assets/icons/types/article.png

drwxr-xr-x. 4 root root     34  Mar 15 03:57 home
drwxr-xr-x. 6 devops nginx  172 Mar 15 05:38 devops
drwxr-xr-x. 6 devops nginx  197 Mar 15 07:56 article-prod
srwxrwx---. 1 devops nginx    0 Mar 15 06:03 articles.sock
drwxr-xr-x. 3 devops nginx   19 Mar 15 04:56 assets
drwxr-xr-x. 4 devops nginx   36 Mar 15 04:56 icons
drwxr-xr-x. 2 devops nginx   25 Mar 15 04:56 types
-rwxr-xr-x. 1 devops nginx 1718 Mar 15 04:56 article.png

FILE nginx.conf:

...
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
...
server {
    listen 80;
    server_name www.article.com;

    location /assets/ {
        root /home/devops/article-prod;
        autoindex on;
    }

    location / {
        proxy_pass http://unix:/home/devops/article-prod/articles.sock;
    }
}
...

FILE articles.service:

[Unit]
Description=Gunicorn instance to serve articles
After=network.target

[Service]
User=devops
Group=nginx
WorkingDirectory=/home/devops/article-prod
Environment="PATH=/home/devops/article-prod/venv/bin"
ExecStart=/home/devops/article-prod/venv/bin/gunicorn --workers 3 --bind unix:articles.sock -m 007 wsgi

[Install]
WantedBy=multi-user.target

我也这样做是为了确保devops用户在nginx组内

sudo usermod -a -G devops nginx

甚至其他方面

sudo usermod -a -G nginx devops

但仍然无效。

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:2)

你试过禁用SELINUX吗?运行以下命令检查SELINUX状态:

buildSequence { val r = Random(); while(true) yield(r.nextInt(24)) }
   .take(10)
   .map{(it+ 65).toChar()}
   .joinToString("")

如果状态为$ sudo sestatus ,您可以通过运行以下来禁用它(临时):

enabled

并修改文件$ sudo setenforce 0 ,然后将/etc/sysconfig/selinux更改为SELINUX=enforcing以永久禁用该文件。

如果需要,可以重新启动服务器。

希望这会对你有所帮助