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?
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;
# ...
}
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;
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/
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;
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é
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;
}