NGINX + Gunicorn + Flask - 502 Bad Gateway - Permission Denied on Socket File.

问题描述 投票:0回答:1

我们正在尝试将NGINX设置为我们的Gunicorn Python应用程序的反向代理。我们一直在遵循Digital Ocean的这个指南(https:/www.digitalocean.comcommunitytutorialshow-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-16-04#create-a-systemd-unit-file). Gunicorn和NGINX都运行在同一个Ubuntu 16.04 32位虚拟机上。

我们在网上看到的所有处理这种权限问题的帖子似乎都指向服务文件中错误的 "组 "设置,或套接字文件的错误权限。但正如你所看到的,我们将组设置为 "www-data"。套接字文件似乎有必要的权限,www-data是所有者。

我们目前设置的是(我把我们的应用程序名称改为 "app")。

run.py

from flask import current_app
import os
from os import path
from application import app
from instance.config import Config

if __name__ == '__main__':
    conf = Config()    
    app.run(host='0.0.0.0', debug=False, threaded=True)

等systemdsystemapp.service

[Unit]
Description=Application
After=network.target

[Service]
User=<root>
Group=www-data
WorkingDirectory=/home/<root>/app
Environment="PATH=/home/<root>/venv/bin"
ExecStart=/home/<root>/venv/bin/gunicorn --workers 3 --bind unix:app.sock -m 007 run:app

[Install]
WantedBy=multi-user.target

etcnginxsites-availableapp

server {
        listen 80;
        server_name app.com;

        location / {
                include proxy_params;
                proxy_pass http://unix:/home/<root>/app/app.sock;
        }
}

varlognginxerror.log

2020/06/05 16:49:22 [crit] 2176#2176: *1 connect() to unix:/home/<root>/app/app.sock failed (13: Permission denied) while connecting to upstream, client: 10.0.2.2, server: app.com, request: "GET / HTTP/1.1", upstream: "http://unix:/home/<root>/app/app.sock:/", host: "app.com"

下面是socket文件的权限。

gsi@ubuntu:~/app$ ls -l app.sock
srwxrwx--- 1 <root> www-data 0 Jun  5 16:10 app.sock

我们是NGINX的新手 所以我们不知道问题出在哪里 也不知道如何解决这个问题。谁能看出我们哪里出了问题?如果有其他信息,请告诉我们。

python nginx flask reverse-proxy gunicorn
1个回答
0
投票

不要在服务器名中输入app.com,而是尝试输入主机的IP地址,看看是否能在机器上运行。

$curl <IP address of the host machine>

如果还是不行的话,我写了一个... ... 文章 上一样,试着用它来实现,如果能成功,告诉我!

希望能帮到你! :)


0
投票

我们能够通过让www-data组访问完整的应用程序文件夹来解决这个问题。sudo chgrp www-data ~/app. 它已经专门访问了socket文件,但没有访问应用程序文件夹。

我认为这没有必要,因为我们指定根用户为服务的所有者。根用户已经有了对应用文件夹的访问权限,而我们所遵循的说明并没有设置组访问的步骤。

不过我对Linux的权限所有权没有太多经验,所以这对大多数有经验的用户来说可能是显而易见的。

© www.soinside.com 2019 - 2024. All rights reserved.