Nginx reescribe correctamente para uno pero no para el otro

Nginx reescribe correctamente para uno pero no para el otro

Básicamente, estoy intentando utilizar la proxy_passdirectiva para llamar a una API remota.

Hasta ahora, esto es lo que obtuve:

server {
  location /a {
    proxy_pass https://a.com;
    rewrite ^/a(.*)$ $1 break; # no trailing slash, defined in application code
  }
  location /b {
    proxy_pass https://b.com;
    rewrite ^/b(.*)$ $1 break; # no trailing slash, defined in application code
  }
  location / {
    # Rest of configuration
  }
}

Me quedo atascado con el hecho de que location /afunciona bien pero location /bpor alguna razón no funciona ( HTTP/404).


Intenté usar una barra diagonal de location /besta manera.

location /b/ {
  proxy_pass https://b.com/;
  rewrite ^/b/(.*)$ $1 break;
}

pero esto tampoco funciona.

Cualquier ayuda es bienvenida.

Respuesta1

Encontré la respuesta a mi problema particular.

Los dos servidores API no están configurados de la misma manera y tuve que modificar un poco la configuración de nginx.

  • El servidor b.comnecesitaba una proxy_set_header Host $hostdirectiva y ninguna rewritedirectiva
  • El servidor a.comnecesitaba la rewritedirectiva pero no laproxy_set_header Host $host

Esto me deja con la siguiente configuración (que funciona para mí):

server {
    location /a {
        proxy_pass  https://a.com;
        rewrite ^/a(.*)$ $1 break;
    }
    location /b {
        proxy_set_header Host $host;
        proxy_pass  https://b.com;
    }
}

información relacionada