2017-11-30 19 views
0

My Flask 기반 웹 응용 프로그램을 사용할 준비가되었습니다. 현재 Apache 2.2에 연결 중입니다.WSGI 앱 (Flask + Apache)에 http 요청 라우팅

제가 아파치가 예상대로

WSGIScriptAlias//var/www/path/to/script.wsgi 

모든 작품 루트에서 응용 프로그램을 제공 시작합니다. 그러나 나는 독특한 별명 각각의 서비스를 제공 할 필요가 의미 다른 데이터베이스에 연결됩니다 WSGI 스크립트의 여러 버전을 제공 할 :

: 나는 이들 중 하나에 액세스하려고

WSGIScriptAlias /firstscript /var/www/path/to/first/script.wsgi 
... 
WSGIScriptAlias /secondscript /var/www/path/to/second/script.wsgi 

www.example.com/firstscript 

WSGI 앱이로드되지만 모든 http 요청은 여전히 ​​루트로 라우팅됩니다. 내 WSGI 응용 프로그램에 대한 모든 HTTP 요청을 다시 라우팅하는 가장 좋은 방법은 무엇입니까? 여기 내 아파치 설정입니다 :

WSGIPythonHome /usr 
WSGIPythonPath /var/www/path/to/first 
<VirtualHost *> 
    WSGIDaemonProcess firstscript user=apache group=apache threads=5 python-path=/lib/python2.7/site-packages 
    WSGIScriptAlias /firstscript /var/www/path/to/first/script.wsgi            

    <Directory /var/www/path/to/first>                 
     WSGIProcessGroup %{GLOBAL} 
     WSGIApplicationGroup %{GLOBAL} 
     Order deny,allow 
     Allow from all 
    </Directory> 
</VirtualHost> 

편집 :

나는 내 아파치 CONFIGS을 정리 도움이 @grahamdumpleton에서 (많은 감사) 권고를 따랐습니다,하지만 내 HTTP 요청은 계속 WSGI 응용 프로그램이 아닌 Apache 서버의 루트로 라우트되어야합니다. 나는 또한 디렉토리 태그에서 프로세스 그룹을 추가하려고했습니다

WSGIPythonHome /usr 
WSGIPythonPath /var/www/path/to/first 
<VirtualHost *> 
    WSGIDaemonProcess firstscript threads=5 
    WSGIScriptAlias /firstscript /var/www/path/to/first/script.wsgi process-group=firstscript application-group=%{GLOBAL}            

    <Directory /var/www/path/to/first> 
     WSGIApplicationGroup %{GLOBAL} 
     Order deny,allow 
     Allow from all 
    </Directory> 
</VirtualHost> 

: WSGIProcessGroup firstscript, 또한 어떤 영향을 미칠 실패 여기 내 현재 설정입니다.

답변

0

다음은 시작 제거해야합니다

WSGIProcessGroup %{GLOBAL} 

이 원인이되는 모든 것을 같은 파이썬 인터프리터에서 처리, 그리고 심지어는 데몬 프로세스 그룹에 할, 그들은 서로 너무 가능성이 방해 .

사용 :

python-path=/lib/python2.7/site-packages 

하는 것도 잘못된 것입니다. 시스템 파이썬을 사용할 때 필요하지 않으며 python-path은 가상 환경을 어쨌든 참조하는 잘못된 방법입니다.

마지막으로 당신은 필요가 없습니다
user=apache group=apache 

중 이미 아파치 사용자가 사용하는 기본값으로

.

각 응용 프로그램이 이제 데몬 프로세스 그룹의 개별 하위 인터프리터에서 실행되므로 첫 번째 변경으로 충분할 수 있습니다.

그래도 작동하지 않으면 둘 이상의 데몬 프로세스 그룹을 만들고 각각을 별도의 데몬 프로세스 그룹에 위임해야합니다.

것은 사용하여 수행 될 것이라고 : 편집에 대한

WSGIDaemonProcess firstscript threads=5 
WSGIScriptAlias /firstscript /var/www/path/to/first/script.wsgi process-group=firstscript application-group=%{GLOBAL} 

WSGIDaemonProcess secondscript threads=5 
WSGIScriptAlias /secondscript /var/www/path/to/second/script.wsgi process-group=secondscript application-group=%{GLOBAL} 
+0

감사합니다! 권장 변경 사항을 적용했지만 내 http 요청은 WSGI 응용 프로그램 대신 웹 서버의 루트로 계속 라우팅됩니다. 새 구성을 볼 수 있도록 내 질문을 편집했습니다! 더 이상 제안 사항이 있습니까? – dslosky

+0

호스트 이름에''ServerName'' 지시자를 추가하지 않았기 때문에 가장 좋습니다. 이전의''VirtualHost''가있는 경우 호스트 이름을 기준으로 일치 할 수없는 경우이를 대체로 사용합니다. 또한 시스템 파이썬을 사용할 때''WSGIPythonHome'' 지시어가 필요 없습니다. 그리고 일반적으로''* ''뿐만 아니라''VirtualHost''에''* : 80''을 사용합니다. –