Proxy passa por dois servidores nginx

1

Eu tenho alguns problemas com nginx e servidores.

Aqui está minha primeira configuração:

server {
    listen   80;
    server_name  *.example.com;

    # Add Headers for odoo proxy mode
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;

    location / {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:8000/;
    }
}

Em seguida, o proxy passa para outro servidor nginx ouvindo na porta 8000 tudo correspondido pelo curinga *.example.com .

O próximo servidor tem algumas configurações que são geradas automaticamente. Parece assim:

upstream upstream_project1 {                                                                                                      
    server 172.18.0.5:8069;
}

server {
    listen   80;
    server_name  project1.example.com;

    location / {
        proxy_redirect off;
        proxy_pass http://upstream_project_1;
    }
}

e

upstream upstream_project2 {                                                                                                      
    server 172.18.0.6:8069;
}

server {
    listen   80;
    server_name  project2.example.com;

    location / {
        proxy_redirect off;
        proxy_pass http://upstream_project_2;
    }
}

Em seguida, a solicitação é transmitida pelo proxy para o servidor de aplicativos em execução de acordo com o fluxo ascendente definido em cada configuração.

O problema que tenho é se eu tenho alguns projetos e cada projeto tem diferentes IPs / hostname. A solicitação parece passar apenas pela primeira configuração.

Parece que o primeiro proxy envia a solicitação e configura os cabeçalhos adequadamente; meu servidor de aplicativos reage, pois está proxieded corretamente.

O problema é que ele proxy o servidor de aplicativos errado.

Além disso, se eu matar o servidor de aplicativos, que ele corresponda primeiro, ele usará um diferente como se estivesse voltando para um servidor "padrão".

    
por Loïc Faure-Lacroix 26.09.2018 / 15:59

1 resposta

1

O nginx usa o cabeçalho Host para selecionar um bloco server apropriado, caso contrário, o bloco de servidor padrão (ou o primeiro bloco de servidor, se nenhum padrão for definido) será usado para processar a solicitação. Consulte este documento para obter detalhes.

Por padrão, proxy_pass define o cabeçalho Host como o valor especificado na diretiva proxy_pass (ou seja, 127.0.0.1:8000 ).

Tente adicionar o seguinte à sua configuração de proxy reverso:

proxy_set_header Host $host;
    
por 26.09.2018 / 16:24