O Nginx é de fato mais performático que o Apache e isso é devido a sua arquitetura. O gerenciamento de threads e processos é  o que faz toda a diferença neste poderoso web server.

Já demonstramos em diversos cursos e posts que a simples configuração de um um web server com Nginx suporta uma carga de tráfego HTTP, no mínimo, 4x superior a um mesmo ambiente utilizando o Apache como web server.

Mas para ambientes web nos dias de hoje, o Nginx sozinho não consegue fazer milagre. Aí que entra e instalação e configuração de módulos como o PHP-APC e o PHP-FPM – vale lembrar que estou me referindo a ambientes web que trabalham com PHP – coisa que acontece na maioria dos casos.

A equação de um ambiente performático com Nginx para mim é Ambiente Web = (Varnish(cache + segurança) + Nginx(PHP-APC + PHP-FPM)) – segurança (php-suhosin + waf))

PHP-APC

APC, sigla de Alternative PHP Cache, é um cache de opcode que pode aumentar significativamente o desempenho da sua aplicação PHP,  além de fazer o cache de variáveis/objetos, assim como o memcached, ele tem a função de fazer cache do próprio código compilado do php.

Em resumo, o APC torna o seu ambiente mais performática porque ele deixa o código já compilado e otimizado em memória ram, mas isso aí tem um pulo do gato. Muitos pecam em simplesmente executar o comando apt-get install php-apc -y, e depois de instalando, dar um control+c e control+v em um conjunto de parâmetros dentro do arquivo php.ini, que habilitam este módulo e mais nada.

Parâmetros com shared.memory, que nada mais é a quantidade de memória que você configura para o apc utilizar, assim como o TTL do cache deverão ser configurados de acordo com a necessidade de cada ambiente web.

Veja o seu funcionamento na imagem abaixo:

O PHP-APC se tornou uma excelente alternativa para aqueles que não possuem muito dinheiro para investir em mais servidores e prepará-los com o FastCGI ou com qualquer outro PHP handler.

PHP-FPM

O PHP-FPM é um produto o um serviço responsável por gerenciar os processos PHP e entregá-los, de forma performática ao Web server.

Veja no gráfico abaixo:

Como no caso do PHP-APC, o PHP-FPM não é só apt-get install php5-fpm -y. Ele requer algumas parametrizações para deixar o seu ambiente mais rápido.

Por exemplo, configurá-lo em modo socket ou invés de tcp/ip, nos casos que o possuímos instalado no mesmo servidor que o web server.

Um dos principais cuidados que administradores de ambientes web precisam ter quando possuem NGINX+PHP-APC+PHP-FPM instalados em um mesmo servidor é quanto a quantidade de open files. 1024 é sentença de morte para este parâmetro.

Mude, em seu /etc/security/limits/conf, para 50000, assim, a possibilidade de um problema com isso será bem menor.

WAF + Nginx

WAF – web application firewall se tornou mais do que necessário quando o assunto é segurança focada em servidores web. E isso é devido aos milhares de ataques que nginx e apaches da vida sofrem a cada segundo.

O problema é que quando possuímos um ambiente web com mais de 5000 conexões HTTP estabelecidas e um waf, seja ele modsecurity, naxsi e tantos outros, instalado e configurado em conjunto com o Web server, a perda de performance é gritante. Estamos falando de mais de 50% ou mais, dependendo da quantidade de regras configuradas no web app firewall para proteger o seu ambiente.

A distribuição de carga HTTP entre 2 ou mais servidores, graças a configuração de um cluster de web server, mitiga o problema. Só que você terá que aumentar a quantidade de nós/servidores, deste ambiente toda vez que a carga for aumentando.

Uma solução para isso é a divisão do seu ambiente em camadas, tendo o Varnish como produto para suportar a primeira delas. O Nginx+PHP-FPM+PHP-APC ficarão na segunda camada, sendo responsáveis por cuidar do conteúdo estático e do PHP, coisa que eles fazem e muito bem.

Varnish

Além de cuidar do conteúdo estático (imagens, css, html) do seu ambiente web, o Varnish é capaz de trabalhar como um WAF, mas precisamos tomar cuidado com isso, já que ele não possui a capacidade de fazer uma inspeção  do método POST do HTTP.

O Varnish coloca todo os objetivos estáticos em memória ram ou em disco – vai do gosto do freguês. Em memória ram, a sua performance aumenta espetacularmente, se comparado com um web server.

Para resolver o problema da inspeção do POST, muitos administradores implementam o PHP-suhosin. Ele é um patch para o PHP que adiciona uma centena de features de segurança, e como sempre, quanto mais segurança você possui em seu ambiente, mais lento ele fica. Por este motivo a necessidade e implementar o PHP-APC e o PHP5-FPM.

Conclusão

Não é simples fato da instalação e configuração do Nginx em seu ambiente, seja em com balanceamento de carga ou não, que determinará um ganho absurdo de performance. Mas sim, a análise e implementação de uma solução que vive o convivo sadio de performance e segurança.

Este é um dos objetivos do curso de hardening, o qual será ministrado na 4bios.