Nginx schreibt für das eine korrekt um, für das andere jedoch nicht

Nginx schreibt für das eine korrekt um, für das andere jedoch nicht

Grundsätzlich versuche ich, mit der proxy_passDirektive eine Remote-API aufzurufen.

Das habe ich bisher bekommen:

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

Ich stecke fest, weil es zwar location /aeinwandfrei funktioniert, location /bes aus irgendeinem Grund aber nicht funktioniert ( HTTP/404).


Ich habe versucht, einen abschließenden Schrägstrich für location /bdiesen Weg zu verwenden

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

aber das funktioniert auch nicht.

Jede Hilfe ist herzlich willkommen.

Antwort1

Ich habe die Antwort auf mein spezielles Problem gefunden.

Die beiden API-Server sind nicht auf die gleiche Weise konfiguriert und ich musste die Nginx-Konfiguration ein wenig anpassen.

  • Der Server b.combenötigte eine proxy_set_header Host $hostDirektive und keine rewriteDirektive
  • Der Server a.combenötigte die rewriteDirektive, aber nicht dieproxy_set_header Host $host

Damit bleibt mir die folgende (für mich funktionierende) Konfiguration:

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

verwandte Informationen