O Nginx chegou ao cPanel

cPanel insere a instalação do Nginx como opção no WHM

O Nginx chegou ao cPanel



Entendendo o Nginx

Nginx (EngineX) é um servidor web e de correio eletrônico para IMAP, POP3 e SMTP, cuja principal característica é trabalhar em formato de Proxy reverso.

Foi originalmente escrito por Igor Sysoev, um russo, nascido em 1970, para o BSD, e posteriormente adaptado para Linux e outras distros.  Teve seu lançamento oficial em outubro de 2004.

Está atualmente executando vários sites russos e internacionais, como Yandex , Mail.Ru , VK, Rambler, Dropbox , Netflix, Wordpress.com , FastMail.FM, Google, Adobe, Autodesk, Atlassian, Intuit, T-Mobile, GitLab, DuckDuckGo, Microsoft, IBM, Google, Adobe, Salesforce, VMWare, Xerox, LinkedIn, Cisco, Facebook, Target, Citrix Systems, Twitter, Apple, Intel, CloudFlare e muitos outros.

Basicamente o Nginx funciona acelerando a consulta e entrega de conteúdo web, mantendo um cache em memória no Servidor instalado.

Um Servidor web padrão funciona de forma a receber solicitações (GET) para um determinado Domínio.  Ele verifica qual é o diretório no Servidor em que está este Domínio e entrega o primeiro arquivo .php ou  .html que este domínio possui (geralmente index.php ou index.html).  Após isso, o arquivo index é lido pelo browser do cliente e continua a realizar as demais solicitações, como imagens, css, scripts e outros arquivos.  Cada solicitação ao Servidor recebe o mesmo tratamento individual.

Este processo, por cada conexão realizada com o Servidor, é chamada de thread.  E ela é individual.  Ou seja, cada conexão possui uma thread no Servidor que irá realizar o GET do arquivo solicitado diretamente no Diretório, em solicitação ao Sistema Operacional.

Quando ocorrem muitas solicitações, começa a haver uma espécie de fila de threads, ou seja, o Servidor começa a demorar a entregar o conteúdo, uma vez que há threads, ou entregas, ainda a serem realizadas.

Esta situação é ainda piorada quando se trata de alta quantidade de conteúdo, como motores de busca, streaming, bancos e outra aplicações deste tipo, que funcionam em cluster ou distribuídas.  Neste caso, o conteúdo fica espalhado em vários Servidores e armazenamentos, demorando ainda mais para finalizar o thread.

Em casos extremos, o Servidor trava.

O Nginx muda este tratamento com o Servidor, transformando o thread em multi-thread, chamado workers.  No Linux, um multi-thread consome menos tempo e energia que a realização de vários threads ao mesmo tempo.

Esta arquitetura e funcionalidade do Nginx faz a simultaneidade deste processo sem a necessidade de um thread adicional para cada nova conexão GET. Um único processo no Nginx pode receber e tratar simultaneamente milhares de conexões HTTP. Isso é obtido por um mecanismo de loop, denominado loop de evento.

Assim, as solicitações GET do cliente são processadas de forma assíncrona, sem aguardar fila, em um único thread e remetidas, simultaneamente, ao Servidor, sendo entregues e recebidas sem fila ou ordem de aguardar a conclusão do thread anterior.

Ao invés de fazer uma solicitação direta ao servidor de tipo thread, o Nginx executa um processo mestre, chamado worker, e vários processos de trabalho, chamados conexões worker.  Toda essa atividade trabalha continuamente e de forma assíncrona.

Quando há um pedido de processamento de conteúdo, ele é feito pelas conexões worker, ao invés de iniciar apenas um thread.  A conexão worker faz a solicitação ao processo mestre que, por sua vez, retorna o resultado do Servidor (conteúdos, PHP, etc). Isso permite o gerenciamento de inúmeras conexões simultâneas.

Este formato de conexão do Nginx é chamado de Event-based web server.

Nginx também trabalha de forma eficiente como Proxy e junto com o Apache.  Neste caso, para a entrega de conteúdo estático ele trabalha as solicitações realizadas de forma mais rápida e global, agilizando o conteúdo de uma requisição e colocando em cache no Servidor.

Este processo, chamado de Proxy Reverso permite verificar se o conteúdo web já está disponível em cache, antes de realizar nova solicitação ao Sistema Operacional e arquivos, ou seja, acionar o Sistema operacional, sistema de arquivos, localização do arquivo no diretório, acessar o disco, ler, etc.

Na combinação com o Apache, quando uma requisição é realizada, o Nginx verifica se é um arquivo estático, como html, imagem ou CSS, por exemplo.  Neste caso, o Nginx verifica se o conteúdo já está cacheado em memória e entrega o arquivo para o usuário, sem precisar lê-lo novamente.  Se não estiver em cache, o Nginx faz a solicitação ao Sistema Operacional, recebe o arquivo e entrega.

Se for um arquivo dinâmico, ou seja, precisar ser processado e o resultado ser entregue, como PHP ou consulta a banco de dados, o Nginx encaminha a requisição para o Apache, que vai processar ela e entregar para o Nginx remeter o resultado para o visitante.

Da mesma forma que o Apache, o Nginx foi criado também com uma interface modular, ou seja, diferentes funções são oferecidas em módulos correspondentes, as quais os administradores optam por instalar e ativar.  De maneira igual, ele possui várias funções que podem ser selecionadas para uso.

O Nginx com Reverse Proxy do cPanel & WHM passa o conteúdo estático e dinâmico por meio de proxy para o Apache.


Pré-requisitos e alertas para a instalação:

Para instalar o Nginx em seu servidor cPanel é preciso estar atento à instalação de dois pré-requisitos fundamentais, além de estar rodando o Easy Apache 4:

Módulos ea-ruby27-mod_passenger e mod_remoteip.

Os módulos Ruby necessários são instalados sob demanda quando você instalar o Nginx.

Já o módulo remoteip é usado para realizar o proxy reverso.

Tenha claro também que o Nginx irá substituir o Apache como o servidor web principal.  A instalação mudará as portas padrão do Apache e atribuirá esses números de porta ao Nginx , para que ele possa operar nestas portas padrão.

Existem alertas para algumas questões de configuração importantes (que cPanel nomeia como limitações da implementação):

As solicitações ao Servidor devem usar um nome de domínio para que o proxy reverso Nginx com armazenamento em cache funcione corretamente.  Solicitações baseadas em IP podem resultar em comportamento inesperado.  Ou seja, seus acessos ao próprio cPanel e WHM devem ser via endereço URL.

Se um de seus domínios corresponder a um domínio proxy, o sistema irá avisá-lo de que irá ignorar entradas duplicadas conflitantes. Este conflito pode resultar em um comportamento também inesperado.

Se você usar o Nginx com o ModSecurity 2, as regras só se aplicam quando o NGINX faz proxy da solicitação para o Apache nas portas padrão: 80 e 443 (https).  A instalação do Nginx , além de substituir o Apache, também criará proxies para Mailman e AutoSSL.

Por motivos de segurança, o Nginx não fornecerá nenhum arquivo com um nome começando com .ht.

A aplicação Optimize Website do cPanel ( cPanel >> Home >> Software >> Optimize Website ) não tem efeito com o Nginx .  Trata-se da compactação Zip do Apache.

Se você, por algum motivo precisar criar um alias, esteja certo de que seu caminho termina com uma barra ( /). Se o caminho não terminar com uma /, então ele está vulnerável a uma exploração de travessia de caminho (path traversal exploit).  Veja mais sobr isso aqui: https://www.acunetix.com/vulnerabilities/web/path-traversal-via-misconfigured-nginx-alias/ e aqui: http://nginx.org/en/security_advisories.html


Instalação:

Você tem três formas de instalar o Nginx .

A primeira é usar a interface Nginx Manager do WHM (WHM >> Home >> Software >> Nginx Manager).

A segunda é através do comando yum install ea-nginx, que deve ser digitado no shell (acesse o seu Servidor como root via ssh).

A terceira é usar a própria interface EasyApache 4 e instalar o módulo ea-nginx.


Configurações:

Agora que você instalou o Nginx, vamos observar algumas modificações de configuração em seu cPanel.

O NGINX armazena dados em cache por cada usuário. O arquivo de cache é armazenado no seguinte local, onde type representa o tipo de cache e username representa o nome de usuário:

/var/cache/ea-nginx/type/username

Os diretórios de cache usam permissões chmod 700 e restritas aos usuários nobody e root.

As portas do Apache 80 e 443 são alteradas para 81 e 444 para realizar o proxy com o Nginx.  As configurações de porta ficam em /etc/nginx/conf.d/ea-nginx.conf

A instalação do Nginx também detectará se um domínio usa CloudFlare e configurará o sistema para funcionar corretamente.  O Nginx salva a configuração CloudFlare no seguinte local: /etc/nginx/conf.d/includes-optional/cloudflare.conf

Se você tiver problemas com a conexão segura com ssl, veja aqui como resolver isso: https://support.cloudflare.com/hc/en-us/articles/200170416-End-to-end-HTTPS-with-Cloudflare-Part-3-SSL-options

O NGINX não armazena o status de métricas no caminho padrão do cPanel.  Assim, seus usuários não terão informações na interface de métricas.  Se você usa Munin, as informações de log referentes ao Apache também não serão mais contabilizadas.   

Nginx salva agora seus arquivos de log nos seguintes locais, onde domain significa o nome do domínio:

SSL: /var/log/nginx/domains/domain-ssl_log

Não SSL: /var/log/nginx/domains/domain

Largura de banda: /var/log/nginx/domains/domain      -bytes_log

Registros de solicitações: /var/log/nginx/access.log

Para reiniciar o serviço Nginx utilize o seguinte comando:

systemctl reload nginx.service

Sucesso e boa sorte com seu Nginx!