
그래서 나는 당황스럽다. 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>