ruby - Cómo preservar URL de solicitud con proxy_pass nginx
thin unicorn (5)
Estaba intentando usar el servidor de aplicaciones Thin y tuve un problema.
Cuando nginx proxies la solicitud de Thin (o Unicornio) utilizando proxy_pass http://my_app_upstream;
la aplicación recibe la URL modificada enviada por nginx ( http://my_app_upstream
).
Lo que quiero es pasar la URL original y la solicitud original del cliente sin modificaciones, ya que la aplicación depende mucho de ella.
El proxies nginx dice:
Si es necesario transmitir el URI en forma no procesada, entonces la directiva proxy_pass debe usarse sin la parte URI.
Pero no entiendo exactamente cómo configurar eso ya que la muestra relacionada está realmente usando URI:
location /some/path/ {
proxy_pass http://127.0.0.1;
}
Entonces, ¿podría ayudarme a averiguar cómo preservar la URL de solicitud original del cliente?
Creo que la directiva proxy_set_header
podría ayudar:
location / {
proxy_pass http://my_app_upstream;
proxy_set_header Host $host;
# ...
}
En mi caso, tengo que hacer esto a través del código siguiente en la configuración nginx vhost
server {
server_name dashboards.etilize.com;
location / {
proxy_pass http://demo.etilize.com/dashboards/;
proxy_set_header Host $http_host;
}}
$ http_host configurará la URL en el encabezado igual que se solicitó
Para reenviar perfectamente sin cortar la URL absoluteURI
de la solicitud y el Host
en el encabezado:
server {
listen 35005;
location / {
rewrite ^(.*)$ "://$http_host$uri$is_args$args";
rewrite ^(.*)$ "http$uri$is_args$args" break;
proxy_set_header Host $host;
proxy_pass https://deploy.org.local:35005;
}
}
Encontrado aquí: https://opensysnotes.wordpress.com/2016/11/17/nginx-proxy_pass-with-absolute-url/
Solo proxy_set_header Host $ host missport para mi caso. Resuelto por:
location / {
proxy_pass http://BACKENDIP/;
include /etc/nginx/proxy.conf;
}
y luego en el proxy.conf
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
nginx también proporciona la variable $ http_host que pasará el puerto por usted. es una concatenación de host y puerto.
Entonces solo necesita hacer: proxy_set_header Host $ http_host;