0

uidwsgi ini ファイルで/パラメータを使用して uWsgi を実行しようとしていgidます。これにより、起動後に特権アクセスが削除されます。

注: これら 2 つのパラメーターを ini ファイルから削除すると、すべて正常に動作します。また、ソケットに問題はありません。ただし、指定したuidand 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 {
    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