Tente usar o suporte ao proxy reverso . Um exemplo da seção location
seria:
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;
}
Este exemplo passará por todas as solicitações para esse server
block para um segundo servidor em execução em localhost:8080
. Isso preserva POST
e também deve preservar outros tipos de solicitações se isso se tornar um problema.
O problema é que os redirecionamentos externos nunca reenviarão POST
data. Isso está escrito na especificação HTTP (marque a seção 3xx). Qualquer cliente que fizer isso está violando a especificação.
If the 301/302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.
Tenho quase certeza de que a maioria dos navegadores implementa isso simplesmente forçando a solicitação redirecionada a ser uma solicitação GET
. Teoricamente, a especificação permite um navegador que pergunte ao usuário se deseja redirecionar os dados de POST
, mas não tenho conhecimento de nenhum que faça atualmente.