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

Nginx Permission Issues on Centos 7 with Gunicorn Socket in Systemd

我们搜索了无数线程来解决这个问题,但 none 似乎对我们有用。 谁能帮我解决这个 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 禁止错误

*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

文件 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;
    }
}
...

文件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

但还是不行。

任何帮助将不胜感激。

您尝试过禁用 SELINUX 吗?通过 运行:

检查你的 SELINUX 状态
$ sudo sestatus

如果状态为 enabled,您可以通过 运行:

禁用它(临时)
$ sudo setenforce 0

并编辑文件 /etc/sysconfig/selinux,然后将 SELINUX=enforcing 更改为 SELINUX=disabled 以永久禁用它。

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

希望这对您有所帮助