Comportamento do nginx como proxy

Comportamento do nginx como proxy

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; }

informação relacionada