uid
wsgi ini ファイルで/パラメータを使用して uWsgi を実行しようとしていgid
ます。これにより、起動後に特権アクセスが削除されます。
注: これら 2 つのパラメーターを ini ファイルから削除すると、すべて正常に動作します。また、ソケットに問題はありません。ただし、指定したuid
and 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を使用しています。