Nginx: como definir o cabeçalho do host para o servidor escolhido (balanceamento de carga)

8

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 que o nome do host não foi encontrado.

Portanto, se eu definir manualmente o cabeçalho para algo, apenas esse site será exibido.

Como posso definir proxy_set_header Host xxxx para o endereço do servidor escolhido? Dessa forma, cada solicitação de reencaminhamento terá um cabeçalho de host diferente e apropriado.

Não será um problema se meus outros dois 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;
        }
    }
}
    
por Muhammad Umer 26.03.2015 / 18:01

2 respostas

4

Você precisa definir o cabeçalho para a variável de entrada do host, conforme documentado aqui :

proxy_set_header Host $host;
    
por 06.05.2015 / 22:45
0

As respostas a essa pergunta explicam esse comportamento e oferecem soluções alternativas .

Essencialmente, o cabeçalho é fixo bem antes do upstream ser selecionado. Se você não puder fazer todos os upstreams responderem a um único cabeçalho Host :, você terá que consertar o upstream ao mesmo tempo em que você definir o cabeçalho.

    
por 23.06.2017 / 03:12

Tags