ruby proxy nginx thin unicorn

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;