Intente utilizar el soporte de proxy inverso en su lugar. Una location
sección de ejemplo sería:
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 ejemplo pasará todas las solicitudes a este server
bloque a un segundo servidor en ejecución localhost:8080
. Esto preserva POST
y también debe preservar otros tipos de solicitud si alguna vez se convierte en un problema.
El problema es que las redirecciones externas nunca reenviarán POST
datos. Esto está escrito en la especificación HTTP (consulte la sección 3xx). Cualquier cliente que haga esto está violando la especificación.
Si se recibe el código de estado 301/302 en respuesta a una solicitud que no sea GET o HEAD, el agente de usuario NO DEBE redirigir automáticamente la solicitud a menos que pueda ser confirmada por el usuario, ya que esto podría cambiar las condiciones bajo las cuales se emitió la solicitud .
Estoy bastante seguro de que la mayoría de los navegadores implementan esto simplemente forzando que la solicitud redirigida sea una GET
solicitud. Teóricamente, la especificación permite un navegador que le pregunte al usuario si debe redirigir los POST
datos, pero no estoy al tanto de ninguno que lo haga actualmente.