【发布时间】:2020-07-14 05:01:54
【问题描述】:
在 uWSGI 中,如果我将我的套接字位置更改为 /tmp/api,则网站呈现。但是,如果我将套接字地址更改为 /srv/www/api/,则会收到 502 网关错误。
我认为这是由于 /srv 文件夹和 Nginx/uWSGI 用户的权限问题。
在/var/log/nginx/error.log:
*1 connect() to unix:///srv/www/api/app.sock failed (2: No such file or directory) while connecting to upstream, client: xxx.xxx.xxx.xxx, server: api.example.com, request: "GET / HTTP/2.0", upstream: "uwsgi://unix:///srv/www/api/app.sock:", host: "api.example.com"
Flask 项目代码位于/srv/www/api。我以username 用户身份登录。
权限:
$ ll -ld /srv/www/api/
drwxrwxr-x 4 www-data www-data 4096 Jun 28 20:52 /srv/www/api/
$ ll -ld /srv/www
drwxrwxr-x 4 username www-data 4096 Jun 27 21:41 /srv/www
$ ll -ld /srv
drwxrwxr-x 4 username username 4096 Jun 27 21:37 /srv
$ ll -ld /tmp
drwxrwxrwt 9 root root 4096 Jun 28 23:05 /tmp
用户组:
$ groups username
username : username sudo dev
$ groups www-data
www-data : www-data dev
$ grep 'dev' /etc/group
dev:x:1001:username,www-data
我有几个用户设置在dev 组中。目标是让组中的用户能够读取和写入/srv,而无需同时位于根组中(这是一种不好的做法吗?)。
/srv/www/api/app.ini:
[uwsgi]
module = wsgi:app
master = true
processes = 5
socket = /tmp/app.sock
chmod-socket = 660
vacuum = true
die-on-term = true
/etc/nginx/sites/sites-available/api.example.com(位置部分):
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/app.sock;
}
有没有办法修复我的权限设置,以便:
- 可以在该文件夹中创建套接字
- 没有 sudo 的 dev 组中的用户也可以读取和写入
/srv文件夹和子目录
【问题讨论】:
标签: sockets nginx flask permissions uwsgi