
Entonces estoy bloqueado. Tengo una aplicación web que usa Django y estoy usando mod_wsgi para integrarla con Apache. Sin embargo, otra persona tiene una directiva en la misma máquina que actúa como proxy a otro servidor. La configuración de Apache es aproximadamente:
Mi aplicación
WSGIScriptAlias /stuff /foo/foo/wsgi.py
WSGIPythonPath /foo
<Directory /foo/foo>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
Su aplicación
<Location "/">
Order Allow,Deny
AllowFromAll
ProxyPass myotherserver
ProxyPassReverse myotherserver
</Location>
Desafortunadamente, su directiva de Ubicación anula mi directiva de script y todas mis solicitudes a http/www.bar.com/stuff terminan siendo reenviadas ahttp://www.myotherserver.com/stuffsin siquiera ejecutar el script wsgi. ¿Cómo hago solicitudes a /stuff directamente a django y no al proxypass sin estropear su código o desarmar su implementación en el otro servidor? he intentado hacer
RewriteEngine on
RewriteCond %{REQUEST_URI} ^!/stuff
RewriteRule ^.*$ /bat/$1 [NC,PT]
<Location "/bat">
Order Allow,Deny
AllowFromAll
ProxyPass myotherserver
ProxyPassReverse myotherserver
</Location>
Pero esto antepone un directorio /bat no válido a mi solicitud cuando llega al otro servidor y rompe todos los enlaces de su página. No quiero hackear todos sus enlaces.
Respuesta1
Entonces, hubo algunos problemas aquí. Primero, mirar los registros en el servidor receptor me dijo que todas las URL reenviadas eran "/", lo que provocó que todas las fotografías de mis compañeros de trabajo estuvieran rotas. Este fue el resultado de que capturé mal los grupos en la expresión regular URI. Capture los grupos envolviéndolos entre paréntesis.
RewriteEngine on
RewriteCond %{REQUEST_URI} ^!/stuff
RewriteRule ^(.*)$ /bat/$1 [NC,PT]
Ahora, hice algo bastante dudoso que funciona, pero agradecería sugerencias sobre alternativas.
<Location "/bat">
Order Allow,Deny
AllowFromAll
RewriteRule /bat/(.*)$ $1 [PT]
ProxyPass myotherserver
ProxyPassReverse myotherserver
</Location>
Básicamente, si la solicitud entrante no es mi subirectorio, la reescribo para que tenga un subdirectorio. Paso para permitirle pasar por la siguiente directiva de ubicación. En la directiva de ubicación para el nuevo subdirectorio, /bat, lo cambio a lo que era y lo paso al otro servidor para que la dirección permanezca intacta.
Respuesta2
Me encontré con el mismo problema.
De acuerdo aeste hilo, Alias
siempre reemplace la semilla WSGIScriptAlias
.
Sin embargo, segúndocumentación modwsgi, podría sustituirse por una Alias
directiva estándar. La solución a su problema sería algo como lo siguiente. Tenga en cuenta que/cosase define antes/
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>