Eu tenho um site que funciona como balanceador de carga. Site A.
Eu tenho outros sites que só podem ter um domínio. Então, se eu apenas redirecionar para eles, ele diz o nome do host não encontrado.
Portanto, se eu definir manualmente o cabeçalho para algo, apenas esse site será exibido.
Como posso definir o proxy_set_header Host xxxx
endereço do servidor escolhido. Dessa forma, cada solicitação de novo roteamento terá um cabeçalho de host diferente e apropriado.
Não será um problema se meus outros 2 sites funcionarem com base no URL e não no cabeçalho do host.
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
é de alguma forma 127.0.0.1 por quê?www.asd.com:80
é escolhidoif(server1) than host = a;
,if(server2) than host = b;
Respostas:
Você precisa definir o cabeçalho para a variável host recebida, conforme documentado aqui :
fonte
This variable is equal to line Host in *the header of request* or name
ou seja, o que o cliente / navegador informar, esse será o escolhido.As respostas a esta pergunta explicam esse comportamento e oferecem soluções alternativas .
Essencialmente, o cabeçalho é corrigido bem antes da seleção do upstream. Se você não conseguir fazer com que todos os fluxos ascendentes respondam a um único cabeçalho Host:, será necessário corrigir o fluxo ascendente ao mesmo tempo em que define o cabeçalho.
fonte