Nginx: ¿Cómo reenvío una solicitud HTTP a otro puerto?

Nginx: ¿Cómo reenvío una solicitud HTTP a otro puerto?

Lo que quiero hacer es: Cuando alguien visita http://localhost/route/abcel servidor responde exactamente lo mismo quehttp://localhost:9000/abc

Ahora configuro mi servidor Nginx así:

location /route {
    proxy_pass  http://127.0.0.1:9000;
}

La solicitud HTTP se envía al puerto 9000correctamente, pero la ruta que recibe http://localhost:9000/route/abcno es http://localhost:9000/abc.

¿Alguna sugerencia?

Respuesta1

Odio la sutileza aquí, pero intenta agregar un / al final de 9000 como se muestra a continuación. Ahora ya no agregará "ruta" a la solicitud reenviada.

location /route {
    proxy_pass  http://127.0.0.1:9000/;
}

Respuesta2

Creo que puedes usar la reescritura para eliminar la parte adicional de la URL. En tu caso creo que podrías usar:

location /route/ {
    rewrite ^/route/?(.*)$ /$1 break;    
    proxy_pass  http://127.0.0.1:9000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Sin embargo, si su aplicación tiene enlaces internos, es posible que aún apunten a /abc/foo y, si hace esto, deben apuntar a /route/abc/foo para que la solicitud sin formato llegue correctamente. Es posible que sea mejor dejar la configuración de nginx como está y, en su lugar, configurar su aplicación para que sepa que se encuentra en un subdirectorio, si puede.

Sé que esta es una vieja pregunta, ¡pero fue la principal respuesta de Google cuando intentaba resolver el mismo problema!

Respuesta3

Prueba lo siguiente

location /route/ {
        proxy_pass  http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Respuesta4

empujenginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

  server {
    listen 8080;

    location / {
      proxy_pass http://compute-1-36:8787;
      proxy_redirect http://compute-1-36:8787/ $scheme://$host:8080/;
    }
  }
}

Este código escucha en 8080 y redirige al puerto 8787 en Compute-1-36. Puedes seleccionar otra ruta en la ubicación./

información relacionada