Versuchen Sie stattdessen, die Reverse-Proxy-Unterstützung zu verwenden. Ein Beispielabschnitt location
wäre:
location / {
proxy_pass http://localhost:8080;
proxy_redirect http://localhost:8080/ /;
proxy_read_timeout 60s;
# May not need or want to set Host. Should default to the above hostname.
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
In diesem Beispiel werden alle Anforderungen an diesen server
Block an einen zweiten Server weitergeleitet, auf dem ausgeführt wird localhost:8080
. Dies bewahrt POST
und sollte auch andere Anfragetypen bewahren, falls dies jemals zu einem Problem wird.
Das Problem ist, dass externe Weiterleitungen niemalsPOST
Daten erneut senden . Dies wird in die HTTP-Spezifikation geschrieben (siehe Abschnitt 3xx). Jeder Client, der dies tut, verstößt gegen die Spezifikation.
Wenn der Statuscode 301/302 als Antwort auf eine andere Anforderung als GET oder HEAD empfangen wird, DARF der Benutzeragent die Anforderung NICHT automatisch umleiten, es sei denn, er kann vom Benutzer bestätigt werden, da dies die Bedingungen ändern kann, unter denen die Anforderung ausgestellt wurde .
Ich bin mir ziemlich sicher, dass die meisten Browser dies implementieren, indem sie die umgeleitete Anforderung einfach als GET
Anforderung erzwingen . Theoretisch erlaubt die Spezifikation einen Browser, der den Benutzer fragt, ob die POST
Daten umgeleitet werden sollen, aber mir sind derzeit keine bekannt.
proxy_set_header
Werte einstellen ? Ansonsten denke ich, dass die Remoteadresse die Remoteadresse des Proxy-Servers wird, aber was ich normalerweise möchte, ist die Remoteadresse des Clients, richtig?proxy_redirect
nimmt zwei Argumente. Siehe die Dokumente: nginx.org/en/docs/http/…