Nginx: So setzen Sie den Host-Header auf den ausgewählten Server (Load Balancing)

10

Ich habe eine Site, die als Load Balancer funktioniert. Site A.

Ich habe andere Websites, die nur eine Domain haben können. Wenn ich also nur zu ihnen umleitung, heißt es, dass der Hostname nicht gefunden wurde.

Wenn ich also den Header manuell auf etwas setze, wird nur diese Site angezeigt.

Wie kann ich die proxy_set_header Host xxxxgewählte Serveradresse einstellen ? Auf diese Weise hat jede Umleitungsanforderung einen anderen und geeigneten Host-Header.

Es ist kein Problem, wenn meine anderen 2 Websites basierend auf der URL und nicht auf dem Host-Header funktionieren könnten.

worker_processes  1;

error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;
error_log  logs/error.log  debug;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    upstream myapp1 {
        #server localhost:3333;
        server www.asd.com:80;
    }

    server {
        listen 80;

        location / {
            proxy_set_header Host            $upstream_addr;  // should become somehow www.asd.com right now this code doesn't work
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass http://myapp1;
        }
    }
}
Muhammad Umer
quelle
$server_addrist irgendwie 127.0.0.1 warum ??
Muhammad Umer
Ich möchte, dass der Host-Header www.asd.com ist, wenn der Server www.asd.com:80ausgewählt wird
Muhammad Umer
oder wenn es eine Möglichkeit gibt zu schreiben if(server1) than host = a; ,if(server2) than host = b;
Muhammad Umer
1
Die Sache ist, dass der entsprechende Host-Header meiner Meinung nach alles sein sollte, was Sie vom Client erhalten. Wenn der Client www.asd.com anfordert, sollte dies der Host-Header sein. Dies hilft, bei Bedarf absolute URLs im Backend korrekt zu generieren, die richtigen Domains für Cookies festzulegen usw. Was auch immer Sie versuchen, Sie sehen es wahrscheinlich falsch.
Florin Asăvoaie
Sowohl der Client als auch der mittlere Server sind ich.
Muhammad Umer

Antworten:

6

Sie müssen den Header auf die eingehende Hostvariable setzen, wie hier dokumentiert :

proxy_set_header Host $host;
Jeff Wong
quelle
This variable is equal to line Host in *the header of request* or nameDas heißt, je nachdem, was der Client / Browser sagt, wird dies ausgewählt.
Muhammad Umer
Das möchten Sie tun, richtig? Der Client fordert von Ihrem Proxy eine Ressource / einen virtuellen Host an, und Sie müssen einen virtuellen Host bereitstellen. Der zu bedienende virtuelle Host wird vom Client / Borros ausgewählt.
Jeff Wong
Kein virtueller Host wird vom Server zufällig ausgewählt
Muhammad Umer
1
Etwas wie das? Erstellen Sie zwei Proxy-Ebenen und setzen Sie den Host fest auf den Endpunkt auf der zweiten Ebene. Serverfault.com/a/622782/287634
Jeff Wong
Ich werde einen Blick darauf werfen, aber ich denke, ich habe es bereits gesehen, seit ich einige Sachen dort hochgestuft habe
Muhammad Umer