我正在尝试使用wsgi文件中的uid/gid参数运行uWsgi,以便在启动后删除特权访问。
注意:当我从ini文件中删除这两个参数时,一切工作正常。而且,我的套接字也没有问题。但是,当我使用指定uid和gid (nginx用户和组)运行时,我得到一个错误,表明我的虚拟环境加载有问题,
Traceback (most recent call last): File "wsgi.py", line 14, in <module> from app import app as application File "/var/www/wsgi/flask-appbuilder/peds_registry/app/__init__.py", line 1, in <module> import logging ImportError: No module named logging
同样,在没有gid/pid的情况下运行时可以正常工作。还要注意,用户和组nginx都存在,并且都拥有python项目目录结构的所有权。
我的Nginx配置的server/location指令如下:
server {
listen 80;
server_name hostname.domain;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name hostname.domain;
ssl_certificate /etc/ssl/certs/host.chained.crt;
ssl_certificate_key /etc/ssl/certs/host.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location /test {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
}我的uwsgi启动是:
#!/bin/sh
# chkconfig: - 99 10
FLASK_HOME=/var/www/wsgi/flask-appbuilder
export PEDS_HOME
ACTIVATE_CMD=/var/www/wsgi/flask-appbuilder/venv/bin/activate
case "$1" in
start)
cd $FLASK_HOME
source $ACTIVATE_CMD
uwsgi -s /tmp/uwsgi.sock -H ./venv/ --ini /var/www/wsgi/flask-appbuilder/test.ini --virtualenv /var/www/wsgi/flask-appbuilder/venv --chmod-socket=666 --manage-script-name --mount /test=run:app --wsgi-file wsgi.py --logto test.log &
;;
stop)
pkill uwsgi
;;
restart)
$0 stop
$0 start
;;
*)
echo "usage: $0 (start|stop|restart|help)"
esac我的uWsgi初创公司ini是:
[uwsgi]
socket = /tmp/uwsgi.sock
chdir = /var/www/wsgi/flask-appbuilder/peds_registry
wsgi-file = wsgi.py
pyhome = /var/www/wsgi/flask-appbuilder/venv
callable = app
manage-script-name = true
mount: /test=run.py 如上所述,在不使用gid/uid参数的情况下加载很好,但是当我添加
uid = nginx
gid = nginx在ini文件中,我得到了上面提到的错误。
我的所有搜索都会得到套接字的权限,但我的问题似乎是从虚拟环境中加载模块。
顺便说一下:我正在使用从pip安装到我的虚拟环境中的uWsgi。
发布于 2016-07-27 02:42:06
这是完全不明显的。作为测试,我尝试使用我自己的uid/gid来运行这个应用程序,瞧,它起作用了!
因此,考虑到“我必须拥有应用程序uid/gid没有权限运行的东西的所有权”,我在用户名上添加了venv,瞧,答案出现了:应用程序的其中一个要求是我需要运行Python Deployment 2.7.6,我按照这个要点安装了Python2.7.6。因此,将DEPLOY目录结构(在venv目录结构之外)的所有权更改为应用程序的用户/组是可行的。
https://stackoverflow.com/questions/38577013
复制相似问题