Pregunta

Estaba tratando de usar Delgada servidor de aplicaciones y tuvo un problema.

Cuando nginx indicadores la solicitud de adelgazar (o unicornio) usando proxy_pass http://my_app_upstream; La solicitud 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 modificación, ya que la aplicación depende en gran medida de ella.

El nginx ' doc dice:

Si es necesario transmitir URI en la forma no procesada, entonces la directiva proxy_pass debe usarse sin parte de URI.

Pero no entiendo cómo configurar exactamente eso, ya que la muestra relacionada realmente está usando URI:

location  /some/path/ {
  proxy_pass   http://127.0.0.1;
}

Entonces, ¿podrías ayudarme a averiguar cómo preserva la URL de solicitud original del cliente?

¿Fue útil?

Solución

Pienso que el proxy_set_header La directiva podría ayudar:

location / {
    proxy_pass http://my_app_upstream;
    proxy_set_header Host $host;
    # ...
}

Otros consejos

Solo proxy_set_header host $ host Miss Port 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;

Para avanzar perfectamente sin cortar el 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/

Nginx también proporciona la variable $ http_host que pasará el puerto por usted. Es una concatenación de host y puerto.

Así que solo necesitas hacer:

proxy_set_header Host $http_host;

En caso de que algo modifique la ubicación que está tratando de servir, por ejemplo, try_files, esto conserva la solicitud del back-end:

location / {
  proxy_pass http://127.0.0.1:8080$request_uri;
}

En mi escenario, he hecho esto a través del código a continuación en la configuración de Nginx Vhost

server {
server_name dashboards.etilize.com;

location / {
    proxy_pass http://demo.etilize.com/dashboards/;
    proxy_set_header Host $http_host;
}}

$ http_host establecerá URL en el encabezado igual que el solicitado

Nota para otras personas que encuentran esto: el corazón de la solución para hacer que Nginx no manipule la URL, es eliminar la barra de corte al final de la copia: Directiva proxy_pass. http: // my_app_upstream VS http: // my_app_upstream/ - Hugo Josefson

Encontré esto arriba en los comentarios, pero creo que realmente debería ser una respuesta.

Para mi servidor de autores ... esto funciona. Me gusta tener opciones para /auth para mi propia legibilidad humanizada ... o también lo tengo configurado por puerto /aguas arriba para máquina a máquina.

.

Al comienzo de conf

####################################################
upstream auth {
    server 127.0.0.1:9011 weight=1 fail_timeout=300s;
    keepalive 16;
  }

Dentro de mi bloque de servidor 443

          if (-d $request_filename) {
          rewrite [^/]$ $scheme://$http_host$uri/ permanent;
      }

  location /auth {
          proxy_pass http://$http_host:9011;
          proxy_set_header Origin           http://$host;
          proxy_set_header Host             $http_host:9011;
          proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
          proxy_set_header Upgrade          $http_upgrade;
          proxy_set_header Connection       $http_connection;
          proxy_http_version 1.1;
      }

En la parte inferior de conf

#####################################################################
#                                                                   #
#     Proxies for all the Other servers on other ports upstream     #
#                                                                   #
#####################################################################


#######################
#        Fusion       #
#######################

server {
    listen 9001 ssl;

#############  Lock it down  ################

# SSL certificate locations
    ssl_certificate /etc/letsencrypt/live/allineed.app/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/allineed.app/privkey.pem;

# Exclusions

    include snippets/exclusions.conf;

# Security

    include snippets/security.conf;
    include snippets/ssl.conf;

# Fastcgi cache rules

    include snippets/fastcgi-cache.conf;
    include snippets/limits.conf;
    include snippets/nginx-cloudflare.conf;

###########  Location upstream ##############

    location  ~ / {
        proxy_pass http://auth;
        proxy_set_header Origin           http://$host;
        proxy_set_header Host             $host:$server_port;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade          $http_upgrade;
        proxy_set_header Connection       $http_connection;
        proxy_http_version 1.1;
    }
        if (-d $request_filename) {
        rewrite [^/]$ $scheme://$http_host$uri/ permanent;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top