
Estou testando o nginx com configurações diferentes para substituir uma arquitetura que trabalha com squid + apache. Eu sei que posso usar o nginx para gerenciar solicitações estáticas e balanceamento de carga, mas estou interessado em uma solução específica que não entendo claramente:
Estou usando 2 servidores nginx (balanceados) com a configuração proxy_pass para passar todas as solicitações para um servidor Apache. Quando um cliente faz uma solicitação ao site, um dos servidores nginx a processa e a envia ao servidor Apache. Agora, como esse comportamento poderia ser uma melhoria para o meu sistema?, parece que todas as requisições estão passando pelo apache e não vejo nenhum benefício. O que acontece quando 100 conexões simultâneas passam pelo nginx? As 100 conexões irão para o servidor apache ou há algum tipo de comportamento interno que permite um pequeno impacto no apache?
Responder1
O Nginx pode ajudar seu Apache quando você tem muitas conexões lentas com seus sites. Por exemplo, a arquitetura da máquina de estado nginx não é vulnerável ao Slowloris DDoShttp://isc.sans.org/diary.html?storyid=6601.
Responder2
Eu sei que o nginx pode executar muitas funções, mas por que não delegar cada parte da arquitetura a um software que execute uma parte dela muito bem? Considere algumas ou todas estas peças: libra ou haproxy para o balanceamento de carga, verniz ou squid para o proxy de cache reverso e ter nginx e apache no back-end para conteúdo estático e dinâmico (respectivamente).
Dito isto, não sei exatamente qual é a sua pergunta. Você disse ao nginx para passar todas as solicitações (presumo que por "passar" você quer dizer não armazená-las em cache) para um back-end do Apache. Sem cache, o benefício seria distribuir a carga entre vários servidores Apache no back-end. Se você tiver apenas um servidor apache back-end, só obterá o benefício armazenando o conteúdo em cache, e não apenas passando as solicitações diretamente.
Mais detalhes sobre sua configuração e o que você deseja fazer ajudariam.
Responder3
Concordo - deixe o nginx servir conteúdo estático diretamente, e o Apache só precisa lidar com o material do PHP - isso significa muito menos trabalhadores do Apache, o que, em última análise, significa um desempenho muito melhor.
localização / { proxy_pass http://backendwww; } localização ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|html|swf|flv|mp3|m4v)$ { access_log off; expira em 30 dias; raiz /var/www/application_webroot; página_erro 404 = @fallback; } localização @fallback { proxy_pass http://backendwww; } localização ~ /\.ht { negar tudo; }
Responder4
Concordo com Zero*, deixe o enginx lidar com toda a estática, no entanto, uma configuração mais simples é apenas passar o php para o backend, em vez de especificar o que não deve ser passado para o Apache/PHP, por exemplo:
location ~ .(php|phtml?)$ { proxy_pass http://backendwww; }