![Nginx schreibt für das eine korrekt um, für das andere jedoch nicht](https://rvso.com/image/769276/Nginx%20schreibt%20f%C3%BCr%20das%20eine%20korrekt%20um%2C%20f%C3%BCr%20das%20andere%20jedoch%20nicht.png)
Grundsätzlich versuche ich, mit der proxy_pass
Direktive 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 /a
einwandfrei funktioniert, location /b
es aus irgendeinem Grund aber nicht funktioniert ( HTTP/404
).
Ich habe versucht, einen abschließenden Schrägstrich für location /b
diesen 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.com
benötigte eineproxy_set_header Host $host
Direktive und keinerewrite
Direktive - Der Server
a.com
benötigte dierewrite
Direktive, 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;
}
}