Zamiast tego spróbuj użyć obsługi odwrotnego proxy . Przykładowa location
sekcja to:
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;
}
Ten przykład przekaże wszystkie żądania do tego server
bloku do drugiego serwera, na którym działa localhost:8080
. To zachowuje POST
i powinno również zachować inne typy żądań, jeśli kiedykolwiek stanie się to problemem.
Problem polega na tym, że zewnętrzne przekierowania nigdy nie będą ponownie wysyłać POST
danych. Jest to zapisane w specyfikacji HTTP (sprawdź sekcję 3xx). Każdy klient, który to zrobi, narusza specyfikację.
Jeśli kod stanu 301/302 zostanie odebrany w odpowiedzi na żądanie inne niż GET lub HEAD, agent użytkownika NIE MOŻE automatycznie przekierować żądania, chyba że może to zostać potwierdzone przez użytkownika, ponieważ może to zmienić warunki, w których żądanie zostało wydane .
Jestem całkiem pewien, że większość przeglądarek implementuje to, po prostu zmuszając przekierowane żądanie do GET
żądania. Teoretycznie specyfikacja zezwala na przeglądarkę, która zapyta użytkownika, czy należy przekierować POST
dane, ale nie jestem świadomy żadnego z tych działań.
proxy_set_header
wartości? W przeciwnym razie zdaje się, że zdalny adres staje się zdalnym adresem serwera proxy, ale to, czego zwykle chcę, to zdalny adres klienta, prawda?proxy_redirect
przyjmuje dwa argumenty. Zobacz dokumentację: nginx.org/en/docs/http/…