Comment conserver l'url de la demande avec Nginx proxy pass

J'ai essayé d'utiliser Mince application serveur et qui ont un problème.

Lorsque nginx procurations la demande de Minces (ou Licorne) à l'aide de proxy_pass http://my_app_upstream;, l'application reçoit l'URL modifiée envoyé par nginx (http://my_app_upstream).

Ce que je veux, c'est passer l'URL d'origine et la requête d'origine du client sans modification car l'application s'en appuie fortement.

Le NGINX ' doc dit:

S'il est nécessaire de transmettre la forme non traitée alors directive proxy_pass doit être utilisé sans URI partie.

Mais je ne comprends pas exactement comment configurer cela car l'échantillon associé utilise réellement URI:

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

Alors pourriez-vous m'aider à comprendre comment préserver l'URL de demande d'origine du client?

57
demandé sur Nakilon 2011-04-29 19:28:53

6 réponses

Je pense que le proxy_set_header la directive pourrait aider:

location / {
    proxy_pass http://my_app_upstream;
    proxy_set_header Host $host;
    # ...
}
98
répondu yibe 2011-04-29 16:25:44

Juste proxy_set_header Host $host Mlle port pour mon affaire. Résolu par:



    location / {
     proxy_pass http://BACKENDIP/;
     include /etc/nginx/proxy.conf;
    }

Puis dans le 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;

10
répondu GKislin 2013-06-12 19:37:49

Parfaitement de l'avant, sans couper le absoluteURI et le Host dans l'en-tête:

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;
    }
}

Trouvés ici: https://opensysnotes.wordpress.com/2016/11/17/nginx-proxy_pass-with-absolute-url/

2
répondu Velkan 2017-07-13 07:58:42

Nginx fournit également la variable $ http_host qui passera le port pour vous. c'est une concaténation de l'hôte et du port.

Donc, vous avez juste besoin de faire: proxy_set_header hôte $ http_host;

1
répondu user6880399 2018-01-18 04:49:20

Dans mon scénario, j'ai fait cela via le code ci-dessous dans la configuration vhost nginx

server {
server_name dashboards.etilize.com;

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

$ http_host définira L'URL dans L'en-tête comme demandé

1
répondu Mansur Ali 2018-05-03 21:39:53

Dans le cas où quelque chose modifie l'emplacement que vous essayez de servir, par exemple try_files, cela préserve la requête pour le back-end:

location / {
  proxy_pass http://127.0.0.1:8080$request_uri;
}
1
répondu Walf 2018-10-03 04:27:02