Comportamiento diferente de "ubicación" y "proxy_pass" en nginx x-accel-redirect
(1)
Tengo mi nginx conf como:
location ^~ /mount_points/mount_point1 {
internal;
alias /repos/mount_point_one;
}
location ^~ /to_proxy {
internal;
proxy_pass http://myproxy:5000;
}
Cuando solicito '' http: //localhost/mount_points/mount_point1/myfile.zip '' obtengo "/repos/mount_point_one/myfile.zip" como se esperaba.
Mientras solicito '' http: //localhost/to_proxy/myfile2.html '', obtengo " http: // myproxy: 5000 / to_proxy / myfile2.html ".
En el primer caso, se eliminó la parte "/ mount_points / monte_punto1", y en el segundo caso, la parte "/ to_proxy" todavía allí, tengo que falsificar una dirección "/ to_proxy" en el servidor ascendente para averiguar esto.
¿Me perdí algo? Si solo tengo que reescribir la url, ¿cómo puedo eliminar el problema de la pieza "/ to_proxy" en el servidor ascendente?
Gracias.
La directiva proxy_pass
puede realizar una función de aliasing, pero solo si se proporciona un URI opcional.
location ^~ /to_proxy/ {
internal;
proxy_pass http://myproxy:5000/;
}
Para hacer que la asignación de alias funcione correctamente, también se agrega un seguimiento /
al parámetro de location
.
Ver este documento para más detalles.
Si el parámetro de seguimiento /
location
causa problemas, puede utilizar una rewrite ... break
lugar, rewrite ... break
:
location ^~ /to_proxy {
internal;
rewrite ^/to_proxy(?:/(.*))?$ /$1 break;
proxy_pass http://myproxy:5000;
}