Me gustaría reescribir la URL en un proxy inverso para que elimine el primer segmento pero deje intactos los segmentos siguientes. Necesito que esto suceda antes de que llegue al pase de proxy.
Ejemplo:
/admin/auth/local ----> (REWRITES TO) /auth/local
/admin/auth/register -------> (REWRITES TO) /auth/register
Mi bloque de ubicación:
location /admin {
#add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass_header Set-Cookie;
proxy_read_timeout 30;
proxy_buffers 64 8k;
rewrite /admin / break;
proxy_pass http://127.0.0.1:9000;
Intenté lo siguiente sin suerte:
rewrite /admin / break;
Respuesta1
Hay dos partes aquí. El primero es cómo nginx enruta las solicitudes entrantes a través de proxy_pass
.
Allí se pueden asignar solicitudes entrantes al /
backend con /admin/
prefijo con la siguiente configuración:
location / {
proxy_pass http://127.0.0.1:9000/admin/;
}
No rewrite
se necesita ninguna declaración.
La segunda parte son las URL que genera la aplicación que se ejecuta en 127.0.0.1:9000
. Debe configurar esa aplicación para generar URL sin el /admin
prefijo para tener URL que coincidan con la configuración de enrutamiento de nginx.
Nginx no puede realizar este cambio de manera confiable en el contenido generado por el backend.
Respuesta2
Creo que solo necesitas agregar tu primer segmento (administrador) al pase de proxy.
proxy_pass http://www.example.com/admin/;
Respuesta3
Puedes probar el siguiente fragmento. Funciona para mi.
location ~* /admin/(.*) {
...
rewrite .* /$1 break;
proxy_pass http://127.0.0.1:9000;
}
(.*)
desde la primera línea se recupera en el bloque como $1
. La idea es recuperar el URI después admin/
y reemplazar todo con ese URI.