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


10

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 xxxxendereç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ê?
Muhammad Umer 26/03

eu quero cabeçalho de anfitrião para ser www.asd.com quando o servidor www.asd.com:80é escolhido
Muhammad Umer

ou se existe uma maneira de escrever if(server1) than host = a; ,if(server2) than host = b;
Muhammad Umer

1
O problema é que o cabeçalho do host apropriado deve ser, na minha opinião, o que você recebe do cliente. Se o cliente solicitar www.asd.com, é o cabeçalho do host. Isso ajudará a gerar corretamente URLs absolutos no back-end quando necessário, definir os domínios apropriados para cookies etc. O que você estiver tentando fazer, provavelmente está olhando para o caminho errado.
Florin Asăvoaie

cliente e servidor do meio sou eu.
Muhammad Umer

Respostas:


6

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

proxy_set_header Host $host;

This variable is equal to line Host in *the header of request* or nameou seja, o que o cliente / navegador informar, esse será o escolhido.
Muhammad Umer

É isso que você gostaria de fazer, correto? O cliente solicita um recurso / host virtual a partir do seu proxy e você precisa atender a um host virtual. O host virtual a ser servido é escolhido pelo cliente / borwser.
Jeff Wong

nenhum host virtual é escolhido pelo servidor de forma aleatória
Muhammad Umer

1
Algo assim? Criar dois níveis de proxy, e definir o host codificado para o ponto final na segunda camada serverfault.com/a/622782/287634
Jeff Wong

mal dar uma olhada, mas eu acho que ive já visto desde que eu upvoted algumas coisas lá
Muhammad Umer

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.