我試圖在我的wsgi ini文件中使用uid
/gid
參數運行uWsgi,以便它在啓動後丟棄特權訪問。使用pid/gid運行uWsgi的問題
注意:當我從我的ini文件中刪除這兩個參數時,一切正常。另外,我的套接字沒有問題。然而,當我與指定uid
和gid
(nginx的用戶和組)上運行,我得到一個錯誤,表示有我的虛擬ENV負荷的問題,
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。
檢查nginx用戶是否有權訪問您的venv中的所有文件和子目錄以及導致該目錄的父目錄 – mata
我之前在父目錄下完成了對整個目錄結構的chown。 –