La directiva de ubicación anula el montaje del alias del script mod_wsgi

La directiva de ubicación anula el montaje del alias del script mod_wsgi

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, Aliassiempre reemplace la semilla WSGIScriptAlias.

Sin embargo, segúndocumentación modwsgi, podría sustituirse por una Aliasdirectiva 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>

información relacionada