2016-07-25 3 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가 모두 존재하며 둘 다 파이썬 프로젝트의 디렉토리 구조에 대한 소유권을 가지고 있습니다.

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 시작은 다음과 같습니다 : 다음과 같이

내 Nginx에의 설정의 서버/위치 지시자는

#!/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을 실행해야한다는 것이 었습니다. Python Deployment. 따라서 디렉토리 구조 (venv의 디렉토리 구조 외부에 있음)의 DEPLOY 소유권을 앱의 사용자/그룹으로 변경하는 것은 티켓이었습니다.