0

我试图在我的 wsgi ini 文件中使用uid/gid参数运行 uWsgi,以便它在启动后放弃特权访问。

注意:当我从我的 ini 文件中删除这两个参数时,一切正常。另外,我的插座没有问题。但是,当我使用指定的uidgid(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 {
    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。

4

1 回答 1

0

这完全不明显。作为测试,我尝试使用我自己的uid/gid来运行该应用程序,你瞧,它成功了!

因此,考虑到“我必须对应用程序uid/gid无权运行的东西拥有所有权”,我在我的用户名上 grep 了 venv,瞧,答案出现了:应用程序的要求之一是我需要运行 python 2.7.6,我按照这个要点安装了它:Python Deployment。因此,将DEPLOY目录结构(在 venv 目录结构之外)的所有权更改为应用程序的用户/组就是票。

于 2016-07-26T18:42:06.160 回答