Estou tentando configurar um balanceador de carga baseado em software com o nginx. Antes de instalar o heartbeat e o pacemaker, criei uma máquina virtual do CentOS e instalei o nginx nele (lb-01), que servirá como meu balanceador de carga. Eu também criei outra máquina virtual do CentOS (web-01) que servirá como meu servidor web. A descrição acima é a maneira mais simples de ter algo em funcionamento antes de adicionar mais recursos a ele no nível de LB ou no nível da Web.
No balanceador de carga, tenho a configuração nginx como:
user nginx nginx;
worker_processes 4;
worker_rlimit_nofile 16384;
pid /var/run/nginx.pid;
events {
worker_connections 4096;
}
http {
include mime.types;
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log error;
sendfile on;
ignore_invalid_headers on;
reset_timedout_connection on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
keepalive_requests 500;
send_timeout 30;
client_body_buffer_size 256k;
large_client_header_buffers 16 8k;
client_body_timeout 30;
client_max_body_size 10m;
client_header_timeout 30;
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
upstream webservers {
server 192.168.173.129;
}
server {
listen 80 default_server;
location / {
proxy_pass http://webservers;
proxy_set_header X-Real-IP $remote_addr;
proxy_next_upstream timeout;
}
}
}
O servidor web (web-01) está escutando na porta 80 por solicitações. Nesse servidor eu especifiquei um default_server para apenas mostrar o nome do host, enquanto outras diretivas processam vários sites configurados no servidor.
Como teste, apontei o registro de um dos meus domínios (abc.example.com) para o endereço IP do balanceador de carga. A idéia é que o pedido vá para o balanceador de carga, ele será passado para a web-01, que irá apontá-lo para o domínio correto e, em seguida, será exibido e os dados serão devolvidos ao cliente.
Então, quando tento carregar abc.example.com, vejo nos registros do balanceador de carga:
173.86.99.33 - - [20/Mar/2011:22:08:17 -0400] GET / HTTP/1.1 "304" 0 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.151 Safari/534.16" "-" "-"
173.86.99.33 - - [20/Mar/2011:22:08:18 -0400] GET /favicon.ico HTTP/1.1 "404" 201 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.151 Safari/534.16" "-" "-"
e olhando para os logs do servidor web (web-01) eu vejo erros como os abaixo:
2011/03/20 22:17:04 [error] 3657#0: *3917 open() "/var/www/_local/favicon.ico" failed (2: No such file or directory), client: 192.168.173.125, server: chromium.niden.net, request: "GET /favicon.ico HTTP/1.0", host: "webservers"
2011/03/20 22:17:04 [error] 3657#0: *3917 open() "/var/www/_local/404.html" failed (2: No such file or directory), client: 192.168.173.125, server: chromium.niden.net, request: "GET /favicon.ico HTTP/1.0", host: "webservers"
O navegador mostra o nome do host (que é o site padrão no servidor, como mencionado anteriormente).
O site em si não é passado do balanceador de carga para o servidor da Web (web-01), portanto, o conteúdo não pode ser retornado corretamente. Portanto, em vez de o servidor da Web retornar o conteúdo de abc.example.com, ele produz erros não encontrados e retorna o site padrão.
Eu tentei o Google, bem como o site do nginx, mas não tive sorte.
Qualquer ponteiro seria mais do que apreciado.
Obrigado!