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 xxxx
wybrany 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;
}
}
}
$server_addr
jest jakoś 127.0.0.1 dlaczego?www.asd.com:80
wybrany jest serwerif(server1) than host = a;
,if(server2) than host = b;
Odpowiedzi:
Musisz ustawić nagłówek na przychodzącą zmienną hosta, jak tu udokumentowano :
źródło
This variable is equal to line Host in *the header of request* or name
co oznacza, co powie klient / przeglądarka, to ten, który zostanie wybrany.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.
źródło