NginX: Otimizando o Desempenho

Aprenda como otimizar o servidor web NginX para um melhor desempenho, e ainda solucione problemas comuns de gateway como 502 e 504.

Nossos tutoriais apresentam soluções de baixo custo para hospedagens de site. Por exemplo, podemos hospedar mais de um domínio no mesmo VPS de 5 dólares/mês usando WordPress como CMS em todos os sites.

Publicamos recentemente um outro tutorial mostrando como adicionar memória Swap ao sistema, o que ajuda a prevenir desligamentos de serviços essenciais por falta de RAM como por exemplo o Banco de Dados MySQL, assim o NginX poderá servir as páginas sem erros de conexão aos dados.

Mas o NginX, mesmo sendo leve e rápido, poderá ter outros problemas se houverem muitos acessos simultâneos em um servidor de baixo custo. Um problema ocasional é quando tentamos fazer uma nova publicação de artigo e, após uma longa pausa, o WordPress apresenta erros de Gateway (502 Bad Gateway or 504 Gateway Timeout), o mesmo problema pode ocorrer se estivermos fazendo a publicação e várias pessoas estarem acessando o site naquele instante.

Para solucionar isso precisamos “tunar” o servidor web.


Otimizando o NginX para desempenho:

1.Edite o arquivo /etc/php5/fpm/php.ini e altere a linha 375 desta maneira:

max_execution_time = 180

2.Edite o arquivo /etc/php5/fpm/pool.d/www.conf e altere a linha 318:

request_terminate_timeout = 180

3.Agora, antes de editarmos o arquivo nginx.conf para modificações, verifique alguns parâmetros necessários:

Digite o seguinte comando para descobrir quantos processadores o seu VPS tem:

> grep processor /proc/cpuinfo | wc -l

Em seguida digite o comando para saber o limite de quantas conexões por segundo o NginX conseguirá suportar:

ulimit -n

* Em um Droplet de $ 5 dólares/mês os valores serão 1 core e 1024 conexões.

4.Edite o arquivo /etc/nginx/nginx.conf e altere conforme mostrado abaixo:

Na linha 2 altere o valor para o número de processadores que o comando mostrou (Na última atualização está como “auto“, pode-se deixar assim):

worker_processes auto;

Na linha 4 altere para o número limite de conexões:

worker_connections 1024;

Descomente as linhas entre a linha 47 até a 55 para habilitar a compressão de arquivos pelo GZip, com esta função habilitada as páginas utilizarão até 50% menos banda ao serem requisitadas:

gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

E por último, insira estas linhas dentro do bloco “http {” que começa na linha 10 (insira no final do bloco e antes do sinal de fechamento “}”, lá pela linha 70):

client_max_body_size 100M;
client_body_buffer_size 16k;
 
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
fastcgi_connect_timeout 180;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;

5.Reinicie os serviços PHP e NginX (se estiver seguindo o tutorial com Ubuntu lembre-se que o “sudo” é seu amigo):

> /etc/init.d/php5-fpm restart
> /etc/init.d/nginx restart

6.Complemente a otimização configurando o modo de operação do PHP-FPM para On Demand clicando aqui.

7.Altere as limitações do PHP para upload de arquivos, isso ajudará a prevenir Erro 500 em uploads de temas e permitirá enviar anexos maiores que 8Mb nos emails.


Conclusão:

Adicionando memória Swap e otimizando o NginX conseguimos um desempenho muito bom num servidor de baixo custo, e ainda prevenimos a maioria dos problemas relacionados a acessos e quedas de serviços.


 NginX: Otimizando o Desempenho
Tutorial ISPConfig 3 〉〉 ÍNDICE ANT PROX

Gerenciamento de Servidores Cloud com atendimento e consultoria em português. Planos mensais com os melhores preços do mercado.
Envie um email para [email protected] e saiba mais!

*Regarding english support please contact me by email or post a comment using the Disqus system. I do offer monthly support and custom server deploy. Now accepting Paypal and Bitcoin!

  • Paulo

    Luis, esta linha request_terminate_timeout = 180 está com ; na frente. É para tirar o ponto e virgula?

  • Isso mesmo Paulo, naquele arquivo o ponto e vírgula serve para “comentar” uma linha de código assim a linha não é executada.

    Tire o ponto e vírgula para descomentá-la.

  • Christiane Lima

    oie Luis, parabens por todo tutorial. Ate aqui consegui, mas esta dando um erro. Vou colar abaixo pra vc ver. Ele nao reiniciou o nginx. Como devo proceder? obrigada!

    [email protected]:/var/www/html$ /etc/init.d/php5-fpm restart

    stop: Rejected send message, 1 matched rules; type=”method_call”, sender=”:1. 42″ (uid=1000 pid=12481 comm=”stop php5-fpm “) interface=”com.ubuntu.Upstart0 _6.Job” member=”Stop” error name=”(unset)” requested_reply=”0″ destination=”c om.ubuntu.Upstart” (uid=0 pid=1 comm=”/sbin/init “)

    start: Rejected send message, 1 matched rules; type=”method_call”, sender=”:1 .43″ (uid=1000 pid=12473 comm=”start php5-fpm “) interface=”com.ubuntu.Upstar t0_6.Job” member=”Start” error name=”(unset)” requested_reply=”0″ destination =”com.ubuntu.Upstart” (uid=0 pid=1 comm=”/sbin/init “)

    [email protected]:/var/www/html$ /etc/init.d/nginx restart

    * Restarting nginx nginx [fail]

  • Olá Christiane, muito obrigado.

    Pelo log da mensagem você está tentando executar os comandos em um Ubuntu logada no sistema com um usuário comum.

    Tente isso:

    sudo service php5-fpm restart
    sudo service nginx restart

    * Você precisa de permissões elevadas para parar/executar serviços.
    Escrevi o tutorial num Debian mas no Ubuntu sempre use o sudo..

  • Christiane Lima

    obrigada Luis, funcionou! Eu sou uma curiosa…rs…e apenas segui os passos do tutorial desde o inicio (para ubuntu) e acabei não vendo a diferença – de ubuntu para debian. 🙂

  • Nem esquente a cabeça, quando precisar de ajuda passe por aqui. Já estou tunando o fórum que deve estar online nos próximos dias.

    E se puder compartilhe o Fator Binário com seus colegas.

  • Para discutir sobre este tutorial use o link para o tópico no Fórum da Comunidade:

    http://fatorbinario.com/comunidade/topico/como-otimizar-o-desempenho-do-nginx/

    *Registre-se na Comunidade e ajude compartilhando conhecimento. Responderei às dúvidas com a mesma rapidez de sempre.

    Muito Obrigado.

  • kleber luan guimaraes souza

    No PHP5 do apache e precisso apenas configurar o: max_execution_time? ou tem que configurar o request_terminate_timeout? Porque parae que esse request_terminate_timeout e apenas para servidores Nginx, e isso mesmo?

  • Iori Yagami

    Quando cheguei no ponto pra testar o limite de processos que minha maquina executa.. o valora retornado foi: 65536 isso é bem mais q 1024.. e to com o mais peba.. ssd 20gb com um single core + 512 de ram… e ai poque meu poder de processamento ta rendendo tanto? continuo essas definições? ulimit -n >>>>>>>>>> return 65536

    http://www.4shared.com/download/UsfNMTGdce/veja-o-valor-dos-meus-processo.png?lgfp=3000

  • O valor correto para essa configuração é 1024.

  • Iori Yagami

    Ja jeitei. Obrigado denovo (y) la no primeiro valor onde setamos auto; qual era mesmo o padrão?

  • Iori Yagami

    usei o indicado.. numero de processadores.. que no final serão 1024 conexções pelo numero de cores = 1

  • Luiz Antonio

    Quando cheguei no passo 5 que fui executar o comando ”
    /etc/init.d/php5-fpm restart” deu o seguinte erro. Restarting PHP5 FastCGI Process Manager: php5-fpm failed!

  • Qual o tutorial você seguiu? O LEMP no Ubuntu ou Debian 7 com ISPConfig?

    Em todo caso tente executar da seguinte forma, reporte se deu certo:

    > /etc/init.d/php5-fpm stop

    > /etc/init.d/php5-fpm start

  • Luiz Antonio

    Refiz todo o tutorial dessa parte de otimização e agora está funcionando, o que me deixou com um pouco de dificuldades foi a questão de comentar e descomentar.

  • Luiz Antonio

    Pensei que tinha dado certo mas agora que criei a conta e subi um site está dando esse erro.
    Welcome to nginx on Debian! If you see this page, the nginx web server is successfully installed and working on Debian. Further configuration is required. For online documentation and support please refer to nginx.org Please use the reportbug tool to report bugs in the nginx package with Debian. However, check existing bug reports before reporting a new bug. Thank you for using debian and nginx.

  • Isso não é um erro. Só está dizendo Bem Vindo ao Nginx.

    Veja que você tem um servidor pronto para múltiplos sites/domínios e quando digita o IP do servidor qual site deveria abrir? Não tem como simplesmente digitar o IP e abrir exatamente o site que você está implantando.

    Se você ainda não apontou o NameServer para a DigitalOcean tem um “truque” que ensino onde é possivel fazer isso provisoriamente (siga este link):http://fatorbinario.com/comunidade/topico/acessando-um-website-pelo-nginx-antes-de-direcionar-o-dominio/

  • Luiz Antonio

    Eu não acessei o IP, acessei o endereço do site mesmo que coloquei lá. Acabei de fazer o que você me instruiu mas continua aparecendo uma pagina da godaddy que é aonde está registrado o meu dominio.
    Vou deletar o dropet e começar de novo até conseguir fazer, obrigado.

  • Lembre de desfazer o que falei senão dá problemas futuros.

    Então, mas lá na Godaddy tem que direcionar os NS para a DigitalOcean e aguardar 24 horas.

  • Luiz Antonio

    Isso mesmo, fui la e adicionei os NS que a CloudFlare me forneceu, mas não resolveu. Vou deixar passar as 24h para deletar o dropet.

  • Luiz Antonio

    Só pra deixar documentado. Não funcionou não, estou achando que é alguma coisa que fiz errado no cloudflare.

  • E seguiu o meu tutorial de DNS para a CloudFlare?
    http://fatorbinario.com/comunidade/topico/cloudflare-configurando-a-tabela-dns/

    Uma dica é sempre fazer a tabela primeiro na DigitalOcean e depois de funcionar acionar o da CloudFlare.

  • Ashley Reese

    Fala meu amigo, muito bom, gostaria de saber se vc pode fazer uma otimizacao em meu servidor. Posso ajudar muito o Fator Binario, divulgando seu blog para muitas pessoas, obrigada 🙂