Nginx reescreve corretamente para um, mas não para o outro

Nginx reescreve corretamente para um, mas não para o outro

Basicamente, estou tentando usar a proxy_passdiretiva para chamar uma API remota.

Até agora, foi isso que consegui:

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
  }
}

Estou preso ao fato de que location /afunciona bem, mas location /bpor algum motivo não funciona ( HTTP/404).


Eu tentei usar uma barra final location /bdesta forma

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

mas isso também não funciona.

Qualquer ajuda é muito bem vinda.

Responder1

Encontrei a resposta para meu problema específico.

Os dois servidores API não estão configurados da mesma maneira e tive que ajustar um pouco a configuração do nginx.

  • O servidor b.comprecisava de uma proxy_set_header Host $hostdiretiva e nenhuma rewritediretiva
  • O servidor a.comprecisava da rewritediretiva, mas não daproxy_set_header Host $host

Isso me deixa com a seguinte configuração (trabalhando para mim):

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

informação relacionada