작성일 댓글 남기기

mod_wsgi를 이용한 multiple apps 세팅

django나 flask, bottle 같은 파이썬프레임웍을 apache에 붙이기 위해 mod_wsgi를 이용할 때
여러개의 app을 사용하게 되면 각 app별로 process를 유일한 이름을 세팅해야 된다.
그렇지 않으면 기대하지 않은 결과가 발생할 수 있다.

보통 wsgi 세팅할 때,

<VirtualHost *>
    ServerName hyunsu.com

    WSGIDaemonProcess myapp user=user1 group=group1 threads=5
    WSGIScriptAlias /myapp /home/apps/myapp/apps.wsgi

    <Directory /home/apps>
        WSGIProcessGroup myapp
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

이렇게 세팅하는데 여기에 app을 하나 추가한다면 아래와 같이 할 수 있다.

 

<VirtualHost *>
    ServerName hyunsu.com

    WSGIDaemonProcess myapp user=user1 group=group1 threads=5
    WSGIScriptAlias /myapp /home/apps/myapp/apps.wsgi

    WSGIScriptAlias /myapp2 /home/apps/myapp2/apps.wsgi 

    <Directory /home/apps> 
        WSGIProcessGroup myapp 
        WSGIApplicationGroup %{GLOBAL} 
        Order deny,allow 
        Allow from all 
    </Directory>
</VirtualHost>

 

근데 이렇게 하면 hyunsu.com/myapp 으로 연결했을 때 hyunsu.com/myapp2의 컨텐츠가 로딩되고
물론 hyunsu.com/myapp2로 연결하면 hyunsu.com/myapp의 컨텐츠가 로딩되기도 한다.

하나의 process에 여러개의 apps을 연결할 때, 각각의 apps의 경로가 중복되면 이런 현상이 발생하는 것으로 보인다.

이런 문제를 피하기 위해 각 apps별로 process를 분리해야 한다.

    WSGIDaemonProcess myapp user=nobody group=nobody processes=1 threads=5
    WSGIDaemonProcess myapp2 user=nobody group=nobody processes=1 threads=5
    WSGIScriptAlias /myapp /home/apps/myapp/apps.wsgi process-group=myapp application-group=%{GLOBAL}
    WSGIScriptAlias /myapp2 /home/apps/myapp2/apps.wsgi process-group=myapp2 application-group=%{GLOBAL}

 

여러개의 app이 하나의 VirtualHost 내에 있든, 여러 VirtualHost에 각각 나눠져 있든지 간에 각 app은 각 process를 가지야 한다.