2016-07-25 47 views
0

我試圖在我的wsgi ini文件中使用uid/gid參數運行uWsgi,以便它在啓動後丟棄特權訪問。使用pid/gid運行uWsgi的問題

注意:當我從我的ini文件中刪除這兩個參數時,一切正常。另外,我的套接字沒有問題。然而,當我與指定uidgid(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。

+0

檢查nginx用戶是否有權訪問您的venv中的所有文件和子目錄以及導致該目錄的父目錄 – mata

+0

我之前在父目錄下完成了對整個目錄結構的chown。 –

回答

0

這完全不明顯。作爲一項測試,我嘗試使用我自己的uid/gid來運行該應用程序,並且看,它工作!因此,在「我必須擁有應用程序uid/gid無權運行的內容」這一問題時,我對我的用戶名上的venv進行了清理,並且看到答案出現了:其中一項要求是應用程序是我需要運行python 2.7.6,我已經安裝了這個Gist:Python Deployment。因此,將DEPLOY目錄結構(位於venv的目錄結構之外)的所有權更改爲應用程序的用戶/組是該票證。