我尝试在二进制文件本身上使用标志(--uid www-data --gid www-data),并在我的配置中设置它:
uid = www-data
gid = www-data
但是套接字始终与我正在使用的帐户一起生成,因此我从nginx中获得了权限被拒绝的错误。
有人知道这是为什么吗?
附加问题:有人知道nginx和uwsgi设置用户的位置吗?我有另一个服务器已经运行了很长时间,它在任何配置文件中都没有设置uid或gid,但所有内容都像应该一样使用www-data。
答案:显然,如果您像我尝试的那样从终端启动服务,即(user@server:~/$ uwsgi --uid www-data --gid www-data),它将始终以调用它的用户身份启动和运行,这就解释了为什么我感觉它没有遵守我的uid和gid标志。当我按下面所述运行它时,它确实以正确的用户/组www-data运行。
更新:
我正在按照您所说的方式启动uWSGI,“sudo service uwsgi start”,这应该触发此文件(/etc/init/uwsgi.conf):
description "uWSGI"
start on runlevel [2345]
stop on runlevel [06]
respawn
env UWSGI=/home/ccadmin/.local/bin/uwsgi
env LOGTO=/var/log/uwsgi/emperor.log
exec $UWSGI --master --emperor /etc/uwsgi/vassals --die-on-term --uid www-data --gid www-data --logto $LOGTO
然而,使用这个配置后,我的emperor.log文件显示:
execvp(): Permission denied [core/emperor.c line 1481]
[emperor] binary path: /home/ccadmin/.local/bin/uwsgi
[emperor] is the uwsgi binary in your system PATH ?
TIME STAMP - [emperor] curse the uwsgi instance cc_uwsgi.ini (pid: ####)
TIME STAMP - [emperor] removed uwsgi instance cc_uwsgi.ini
如果我将--uid和--gid更改为root,那么一切都正常工作。这一定是一些简单的权限问题,但由于我对Linux不熟悉,我很难找到它的具体位置。
另外,奇怪的是它让我在系统路径中查找uwsgi二进制文件...它应该在那里吗?因为我已经在/etc/environment中将/home/ccadmin/.local/bin添加到了我的系统路径中。它不应该在那里吗?或者应该一直到二进制文件?(例如,添加/home/ccadmin/.local/bin/uwsgi而不仅仅是/bin)