【发布时间】:2020-09-25 06:22:33
【问题描述】:
我们正在尝试将 NGINX 设置为 Gunicorn Python 应用程序的反向代理。我们一直在关注来自 Digital Ocean (https://www.digitalocean.com/community/tutorials/how-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)
/etc/systemd/system/app.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
/etc/nginx/sites-available/app
server {
listen 80;
server_name app.com;
location / {
include proxy_params;
proxy_pass http://unix:/home/<root>/app/app.sock;
}
}
/var/log/nginx/error.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"
以下是套接字文件的权限:
gsi@ubuntu:~/app$ ls -l app.sock
srwxrwx--- 1 <root> www-data 0 Jun 5 16:10 app.sock
我们是 NGINX 的新手,所以我们不太确定问题是什么或如何解决此问题。谁能看到我们在哪里出错了?如果我们可以提供其他信息,请告诉我们。
【问题讨论】:
-
Nginx是否在www-data组中? -
@Sraw 当我使用
getent group www-data检查谁是 www-data 组的成员时,我得到以下输出:www-data:x:33:。这是你指的吗?感谢您的评论! -
我的意思是如果
nginx用户在www-data组中。嗯,组里好像没有用户。 -
看起来 nginx 根本不是系统上的用户。
-
根据您的 Nginx 配置可能会有所不同。如果你使用
ps -ef|grep nginx,你会看到有主进程和工作进程。关键是让工作进程能够访问套接字文件。在我的服务器上,worker进程属于nginx用户,在你的服务器上可能不一样,但重点是一样的。
标签: python nginx flask reverse-proxy gunicorn