Saltar al contenido

Proxy inverso Nginx + reescritura de URL

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_passque 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ícito rewrite directiva.

  • Además, tenga en cuenta que el arrastrando / en el location 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 el location con proxy_pass también asegura algunos manejo especialsegún la documentación del location directiva, para causar efectivamente un implícito location = /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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *