Te recomendamos que pruebes esta solución en un entorno controlado antes de enviarlo a producción, saludos.
Solución:
Solución 1:
Cualquier redireccionamiento a localhost no tiene sentido desde un sistema remoto (por ejemplo, el navegador web del cliente). Por lo tanto, las banderas de reescritura permanente (301) o redirección (302) no se pueden usar en su caso.
Intente seguir la configuración usando una regla de reescritura transparente:
location /foo
rewrite /foo/(.*) /$1 break;
proxy_pass http://localhost:3200;
proxy_redirect off;
proxy_set_header Host $host;
Usar curl -i
para probar tus reescrituras. Un cambio muy sutil en la regla puede hacer que nginx realice una redirección.
Solución 2:
ubicación sencilla prefix la coincidencia funciona para esto sin usar una regla de reescritura siempre que especifique un URI en la directiva proxy_pass:
location /foo
proxy_pass http://localhost:3200/;
Observe el adicional /
al final de proxy_pass
directiva. NGINX eliminará el emparejado prefix /foo
y pasar el resto al servidor backend en el URI /
. Por lo tanto, http://myserver:80/foo/bar
publicará en el backend en http://localhost:3200/bar
.
De los documentos de NGINX en proxy_pass:
Si la directiva proxy_pass se especifica con un URI, cuando se pasa una solicitud al servidor, la parte de un URI de solicitud normalizado que coincide con la ubicación se reemplaza por un URI especificado en la directiva:
Solución 3:
La forma más correcta absoluta y la mejor práctica suele ser la siguiente:
location /foo/
proxy_pass http://localhost:3200/; # note the trailing slash!
-
Tenga en cuenta la enorme importancia de la barra diagonal en
proxy_pass
que modifica automáticamente la$uri
variable para tener/foo/
en la parte delantera corresponden con/
en el back-end. No hay necesidad de un explícitorewrite
directiva. -
Además, tenga en cuenta que el arrastrando
/
en ellocation
también es bastante importante: sin él, corre el riesgo de tener direcciones URL extrañas en su sitio en algún momento (p./fooen
además de/foo/en
).Además, el seguimiento
/
en ellocation
conproxy_pass
también asegura algunos manejo especialsegún la documentación dellocation
directiva, para causar efectivamente un implícitolocation = /foo return 301 /foo/;
también.Entonces, al definir un
location
con la barra inclinada final como se indicó anteriormente, no solo se asegura de que las URL de sufijo sin barra inclinada como/fooen
no será válido, sino también que un/foo
sin una barra inclinada seguirá funcionando también.
Documentación de referencia:
- http://nginx.org/r/ubicación
- http://nginx.org/r/proxy_pass
Solución 4:
probar
location /foo {
proxy_pass http://localhost:3200/;
....
o
location ^~ /foo {
proxy_pass http://localhost:3200/;
....
Nos puedes añadir valor a nuestro contenido informacional contribuyendo tu veteranía en las referencias.