Redireccionamiento de Nginx a través de proxy, reescritura y conservación de URL

Pregunta:

En Nginx hemos intentado redirigir una URL de la siguiente manera:

http://example.com/some/path -> http://192.168.1.24

donde el usuario todavía ve la URL original en su navegador. Una vez que se redirige al usuario, digamos que hace clic en el enlace a /section/index.html , nos gustaría que esto hiciera una solicitud que conduzca a la redirección.

http://example.com/some/path/section/index.html -> http://192.168.1.24/section/index.html

y de nuevo aún conserva la URL original.

Nuestros intentos han involucrado varias soluciones que utilizan proxies y reglas de reescritura, y a continuación se muestra la configuración que nos ha acercado más a una solución (tenga en cuenta que esta es la configuración del servidor web para el servidor web example.com ). Sin embargo, todavía hay dos problemas con esto:

  • No realiza la reescritura correctamente, ya que la URL de solicitud recibida por el servidor web http://192.168.1.24 incluye /some/path y, por lo tanto, no sirve la página requerida.
  • Cuando se desplaza sobre un enlace una vez que se ha publicado una página, falta /some/path en la URL

     server { listen 80; server_name www.example.com; location /some/path/ { proxy_pass http://192.168.1.24; proxy_redirect http://www.example.com/some/path http://192.168.1.24; proxy_set_header Host $host; } location / { index index.html; root /var/www/example.com/htdocs; } }

Buscamos una solución que solo implique cambiar la configuración del servidor web en example.com . Podemos cambiar la configuración en 192.168.1.24 (también Nginx), sin embargo, queremos intentar evitar esto porque necesitaremos repetir esta configuración para cientos de servidores diferentes cuyo acceso es proxy a través de example.com .

Respuesta:

Primero, no debe usar root directiva root dentro del bloque de ubicación, es una mala práctica. Sin embargo, en este caso no importa.

Intente agregar un segundo bloque de ubicación:

location ~ /some/path/(?<section>.+)/index.html {
    proxy_pass http://192.168.1.24/$section/index.html;
    proxy_set_header Host $host;
}

Esto captura la parte después de / some / path / y antes de index.html en una variable $ section, que luego se usa para establecer el destino de proxy_pass. Puede hacer que la expresión regular sea más específica si lo necesita.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım