Попробуйте использовать поддержку обратного прокси . Пример location
раздела будет:
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;
}
В этом примере все запросы к этому server
блоку будут передаваться на второй запущенный сервер localhost:8080
. Это сохраняет POST
и должно также сохранять другие типы запросов, если это когда-либо станет проблемой.
Проблема в том, что внешние перенаправления никогда не будут повторно отправлять POST
данные. Это записано в спецификации HTTP (см. Раздел 3xx). Любой клиент, который делает это, нарушает спецификацию.
Если код состояния 301/302 получен в ответ на запрос, отличный от GET или HEAD, пользовательский агент НЕ ДОЛЖЕН автоматически перенаправлять запрос, если он не может быть подтвержден пользователем, поскольку это может изменить условия, при которых был выдан запрос ,
Я вполне уверен, что большинство браузеров реализуют это, просто заставляя перенаправленный запрос быть GET
запросом. Теоретически, спецификация допускает браузер, который спрашивает пользователя, следует ли перенаправлять POST
данные, но я не знаю ничего, что в настоящее время делает.
proxy_set_header
значения? В противном случае я предполагаю, что удаленный адрес становится удаленным адресом прокси-сервера, но что я обычно хочу, так это удаленный адрес клиента, верно?proxy_redirect
принимает два аргумента. См. Документы: nginx.org/en/docs/http/…