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를 가지야 한다.