在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;
}
有没有一种方法可以修复我的权限设置,以便:/srv
文件夹和子目录最佳答案
我想通了。我最终将文件夹的所有者设置为:
chown -R username:www-data /srv/www/api
每次更改后,我还确保重新启动systemctl服务。我不记得之前做过这件事,所以很可能是即使进行了所有更改之后,仍然没有任何效果的原因。我只重新启动了Nginx,而不是服务本身-负责创建套接字的服务。要重新启动systemctl服务:
sudo systemctl restart <service_name>
关于sockets - Nginx和uWSGI : Proper permissions setup for 502 Bad Gateway issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62644037/