Nginx: jak ustawić nagłówek hosta na wybranym serwerze (równoważenie obciążenia)

10

Mam witrynę, która działa jako moduł równoważenia obciążenia. Strona A.

Mam inne witryny, które mogą mieć tylko jedną domenę. Więc jeśli po prostu przekieruję do nich, to nazwa hosta nie zostanie znaleziona.

Więc jeśli ręcznie ustawię nagłówek na coś, wtedy tylko ta strona się pokaże.

Jak ustawić proxy_set_header Host xxxxwybrany adres serwera. W ten sposób każde żądanie przekierowania będzie miało inny i odpowiedni nagłówek hosta.

Nie będzie problemu, jeśli moje pozostałe 2 witryny będą działać w oparciu o adres URL, a nie nagłówek hosta.

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
źródło
$server_addrjest jakoś 127.0.0.1 dlaczego?
Muhammad Umer
Chcę, aby nagłówkiem hosta była www.asd.com, gdy www.asd.com:80wybrany jest serwer
Muhammad Umer
lub jeśli istnieje sposób na napisanie if(server1) than host = a; ,if(server2) than host = b;
Muhammad Umer
1
Chodzi o to, że moim zdaniem odpowiedni nagłówek hosta powinien być tym, co otrzymujesz od klienta. Jeśli klient zażąda www.asd.com, to powinien być nagłówek hosta. Pomoże to w prawidłowym generowaniu bezwzględnych adresów URL w zapleczu, w razie potrzeby, ustawi odpowiednie domeny dla plików cookie itp. Cokolwiek próbujesz zrobić, prawdopodobnie patrzysz na to w niewłaściwy sposób.
Florin Asăvoaie
klient i serwer środkowy to ja.
Muhammad Umer

Odpowiedzi:

6

Musisz ustawić nagłówek na przychodzącą zmienną hosta, jak tu udokumentowano :

proxy_set_header Host $host;
Jeff Wong
źródło
This variable is equal to line Host in *the header of request* or nameco oznacza, co powie klient / przeglądarka, to ten, który zostanie wybrany.
Muhammad Umer,
To właśnie chcesz zrobić, prawda? Klient żąda zasobu / wirtualnego hosta od twojego proxy i musisz obsłużyć hosta wirtualnego. Host wirtualny, który ma być obsługiwany, wybiera klient / przeglądarka.
Jeff Wong,
serwer losowo nie wybiera wirtualnego hosta
Muhammad Umer
1
Coś takiego? Utwórz dwa poziomy proxy i ustaw host na stałe do punktu końcowego na drugiej warstwie serverfault.com/a/622782/287634
Jeff Wong
źle się przyglądam, ale myślę, że już to widziałem, odkąd napisałem o tym kilka rzeczy
Muhammad Umer
0

Odpowiedzi na to pytanie wyjaśniają to zachowanie i oferują obejścia .

Zasadniczo nagłówek jest ustalany na długo przed wybraniem w górę. Jeśli nie możesz sprawić, aby wszystkie strumienie odpowiedzi reagowały na pojedynczy nagłówek Host:, musisz naprawić transmisję w tym samym czasie, gdy ustawiasz nagłówek.

GreenReaper
źródło