So erhalten Sie eine URL der Anfrage mit nginx proxy_pass
Frage
Ich habe versucht zu benutzen Dünn App Server und hatte ein Problem.
Wenn nginx Stellvertreter die Anfrage zum Dünn (oder Einhorn) verwendet proxy_pass http://my_app_upstream;
Die Anwendung empfängt die von Nginx gesendete geänderte URL (http://my_app_upstream
).
Ich möchte die ursprüngliche URL und die ursprüngliche Anfrage von Client ohne Änderung bestehen, da die App stark darauf abhängt.
Der nginx ' Dokument sagt:
Wenn es notwendig ist, URI in unverarbeiteter Form zu übertragen, sollte die Richtlinie proxy_pass ohne URI -Teil verwendet werden.
Ich verstehe jedoch nicht, wie genau das konfiguriert werden soll, wenn das zugehörige Beispiel tatsächlich URI verwendet:
location /some/path/ {
proxy_pass http://127.0.0.1;
}
Könnten Sie mir bitte helfen, herauszufinden, wie es geht Bewahren Sie die ursprüngliche URL der Anfrage bei vom Kunden?
Lösung
Ich denke, die proxy_set_header
Richtlinie könnte helfen:
location / {
proxy_pass http://my_app_upstream;
proxy_set_header Host $host;
# ...
}
Andere Tipps
Just Proxy_Set_header Host $ Host Miss Port für meinen Fall. Gelöst von:
location / {
proxy_pass http://BACKENDIP/;
include /etc/nginx/proxy.conf;
}
und dann im 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;
Perfekt vorwärts nach vorne, ohne das zu hacken absoluteURI
der Anfrage und der Host
im Kopf:
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;
}
}
Hier gefunden: https://opensysnotes.wordpress.com/2016/11/17/nginx-proxy_pass-with-absolute-url/
Nginx stellt auch die Variable $ http_host bereit, die den Port für Sie passt. Es ist eine Verkettung von Host und Port.
Also musst du nur tun:
proxy_set_header Host $http_host;
Falls etwas den Ort modifiziert, den Sie zu dienen versuchen, z. B. try_files
, Dies bewahrt die Anfrage für das Back-End:
location / {
proxy_pass http://127.0.0.1:8080$request_uri;
}
In meinem Szenario habe ich dies über den folgenden Code in der Nginx Vhost -Konfiguration erstellt
server {
server_name dashboards.etilize.com;
location / {
proxy_pass http://demo.etilize.com/dashboards/;
proxy_set_header Host $http_host;
}}
$ http_host setzt die URL in Header wie angefordert
Hinweis an andere Personen, die dies finden: Das Herz der Lösung, um Nginx nicht zu manipulieren, besteht darin, den Schrägstrich am Ende der Kopie zu entfernen: Proxy_Pass -Anweisung. http: // my_app_upstream vs http: // my_app_upstream/ - Hugo Josefson
Ich habe das oben in den Kommentaren gefunden, aber ich denke, es sollte wirklich eine Antwort sein.
Für meinen Auth -Server ... das funktioniert. Ich möchte Optionen für /auth für meine eigene humanisierte Lesbarkeit haben ... oder ich habe es auch mit Port /Upstream für Maschine zu Maschine konfiguriert.
.
Zu Beginn von Conf
####################################################
upstream auth {
server 127.0.0.1:9011 weight=1 fail_timeout=300s;
keepalive 16;
}
In meinem 443 Serverblock
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;
}
Am Ende des Confs
#####################################################################
# #
# 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;
}
}