위치 지시어는 mod_wsgi 스크립트 별칭 마운트를 재정의합니다.

위치 지시어는 mod_wsgi 스크립트 별칭 마운트를 재정의합니다.

그래서 나는 당황스럽다. Django를 사용하는 웹앱이 있고 mod_wsgi를 사용하여 이를 Apache와 통합하고 있습니다. 그러나 다른 사람은 다른 서버로 프록시하는 동일한 시스템에 대한 지시문을 가지고 있습니다. 아파치 구성은 대략 다음과 같습니다.

내 앱

WSGIScriptAlias /stuff /foo/foo/wsgi.py
WSGIPythonPath /foo
<Directory /foo/foo>
    <Files wsgi.py>
        Order deny,allow
        Allow from all
    </Files>
</Directory>

그의 앱

<Location "/">
    Order Allow,Deny
    AllowFromAll
    ProxyPass myotherserver
    ProxyPassReverse myotherserver
</Location>

불행하게도 그의 위치 지시문은 내 스크립트 지시문보다 우선하며 http/www.bar.com/stuff에 대한 모든 요청은 결국 다음으로 전달됩니다.http://www.myotherserver.com/stuffwsgi 스크립트를 실행하지 않고도 말이죠. 코드를 엉망으로 만들거나 다른 서버에서 구현을 분해하지 않고 /stuff에 대한 요청을 django가 아닌 Proxypass가 아닌 직접 요청하려면 어떻게 해야 합니까? 나는 노력했다

RewriteEngine on
RewriteCond %{REQUEST_URI} ^!/stuff
RewriteRule ^.*$ /bat/$1 [NC,PT]

<Location "/bat">
    Order Allow,Deny
    AllowFromAll
     ProxyPass myotherserver
     ProxyPassReverse myotherserver
</Location>

그러나 이것은 다른 서버에 도달할 때 내 요청 앞에 유효하지 않은 /bat 디렉토리를 추가하고 그의 페이지에 있는 모든 링크를 깨뜨립니다. 나는 그의 모든 링크를 해킹하고 싶지 않습니다.

답변1

그래서 여기에는 몇 가지 문제가 있었습니다. 먼저, 수신 서버의 로그를 살펴보면 전달되는 모든 URL이 "/"이어서 동료의 사진이 모두 깨졌다는 것을 알 수 있었습니다. 이는 URI 정규식에서 그룹을 잘못 캡처한 결과입니다. 그룹을 괄호로 묶어 캡처합니다.

RewriteEngine on
RewriteCond %{REQUEST_URI} ^!/stuff
RewriteRule ^(.*)$ /bat/$1 [NC,PT]

이제 나는 효과가 있는 다소 이상한 작업을 수행했지만 대안에 대한 제안을 환영합니다.

<Location "/bat">
    Order Allow,Deny
    AllowFromAll
    RewriteRule /bat/(.*)$ $1 [PT]
    ProxyPass myotherserver
    ProxyPassReverse myotherserver
</Location>

따라서 기본적으로 들어오는 요청이 내 하위 디렉터리가 아닌 경우 하위 디렉터리를 갖도록 다시 작성합니다. 다음 위치 지시문을 통과할 수 있도록 통과합니다. 새 하위 디렉터리 /bat에 대한 위치 지시문에서 이를 원래대로 다시 변경하고 주소가 그대로 유지되도록 다른 서버에 전달합니다.

답변2

나는 같은 문제에 부딪쳤다.

에 따르면이 스레드, Alias항상 대체합니다 WSGIScriptAlias.

그러나 따르면modwsgi 문서, 표준 Alias지시어로 대체될 수 있습니다. 문제에 대한 해결책은 다음과 같습니다. 참고하세요/물건이전에 정의되었습니다/

Alias /stuff /foo/foo/wsgi.py
WSGIPythonPath /foo
<Directory /foo/foo>
    <Files wsgi.py>
        Options ExecCGI
        SetHandler wsgi-script
        Order deny,allow
        Allow from all
    </Files>
</Directory>

<Location "/">
    Order Allow,Deny
    Allow from all
    ProxyPass myotherserver
    ProxyPassReverse myotherserver
</Location>

관련 정보