Parece que descobri a resposta para isso.
Eu precisava adicionar a linha proxy_set_header Host $ host; logo abaixo das linhas proxy_pass nos meus arquivos de configuração do balanceador de carga.
Eu tenho cinco sites e tenho três servidores, todos rodando nginx.
Cada site tem seu próprio servidor principal, mas todos compartilham o mesmo servidor de failover. Meu balanceador de carga está configurado para enviar todo o tráfego para o servidor principal de cada site. Somente se esse servidor principal ficar inativo, o balanceador de carga enviará tráfego para o servidor de failover.
Para cada site, eu tenho um arquivo de configuração nginx separado no balanceador de carga semelhante a este:
upstream website {
server 1.2.3.4 fail_timeout=3s max_fails=3 weight=10000;
server 4.3.2.1;
}
server {
listen 80;
server_name www.websitename.com;
client_max_body_size 150M;
location / {
proxy_pass http://website;
}
}
server {
listen 80;
server_name websitename.com;
client_max_body_size 150M;
location / {
proxy_pass http://website;
}
}
Com esse arquivo de configuração, tudo funciona bem. Todo o tráfego é enviado para o servidor principal, se o servidor principal ficar inativo, o tráfego será enviado para o servidor de failover.
O problema vem com o servidor de failover. Eu tenho cinco sites diferentes no servidor de failover, todos com seu próprio arquivo de configuração nginx separado no diretório de sites disponíveis. O problema é que, quando o tráfego é enviado ao servidor de failover, o nginx exibe o primeiro arquivo de configuração disponível e o site associado, não o site correto.
Cada arquivo de configuração do site no servidor de failover se parece com o arquivo de configuração abaixo. Naturalmente, cada um tem um URL diferente e um diretório raiz, mas essa é a única diferença. Nesse caso, combinei o arquivo de configuração de exemplo a ser associado ao exemplo do arquivo de configuração do balanceador de carga:
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/html/websitename;
index index.php;
server_name websitename.com;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Além disso, não tenho certeza se isso é importante, mas o DNS Um registro para o site está definido para apontar para o balanceador de carga.
Estou certo de que o problema está na falha dos arquivos de configuração do site, mas não sei o que está errado. Eu apreciaria qualquer ajuda, obrigado.
Parece que descobri a resposta para isso.
Eu precisava adicionar a linha proxy_set_header Host $ host; logo abaixo das linhas proxy_pass nos meus arquivos de configuração do balanceador de carga.
Tags nginx failover load-balancing