작성일 댓글 남기기

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

작성일 댓글 남기기

https에서 http로 링크걸었을 때 referer 안 생기는 현상

지정한 referer만 허용하는 http 사이트를 만들었다.
그런 후 https 페이지에서 http 사이트를 링크걸었을 때 https 쪽을 허용했음에도 불구하고 권한이 없다고 나온다.
패킷헤더를 확인해보니 referer가 없이 http로 요청하고 있었다.
검색을 해보니 https -> http 링크 타고 갈 때 referer는 생성되지 않는단다.

http://en.wikipedia.org/wiki/HTTP_referrer
https://tools.ietf.org/html/rfc2616#section-15.1.3


해결방법을 찾다 보니 chrome 과 firefox에서는 아래코드를 써서 referer를 생성할 수 있었다.

1
<meta name="referrer" content="origin">

IE에서는 안된다. (version 10 에서 test)

참고 : http://wiki.whatwg.org/wiki/Meta_referrer

구글은 https로 나오는 검색결과에서 http 링크로 갈 때 referer를 생성하도록 내부적인 처리를 한 것으로 보인다.

https://www.google.com/search?q=what+is+my+referer 검색결과에서
www.whatismyreferer.com 으로 이동하면 referer를 볼 수 있다.

내가 처리한 방법은 https 링크에서 내부페이지의 http로 링크를 보내서 그쪽에서 refresh 되도록 하는 것이다.
예를 들어 https에서 페이지에서 링크를 걸 때 이렇게 걸어둔다.

https page:

1

http://localpage.html 에서는 origin_url 을 포워딩하는 것으로 처리한다.

http page:

1
<script>window.location='origin_url';</script>