Instalando o nginx
O primeiro passo é instalar o nginx. Não há muito o que falar nessa parte. O Guia do PC utiliza Ubuntu Server, logo, o nginx pode ser instalado com apt-get install nginx (o mesmo para outros sistemas baseados em Debian). Consulte a documentação para a sua distribuição. Se você gosta de compilar seus próprios programas, acesse a página de download do nginx e baixe a última versão.Configurando o nginx
Agora vem a melhor parte: configurar o servidor. A wiki do projeto fornece algumas dicas para você configurar o seu. É importante lembrar que o nginx é um servidor web completo, e a única razão para eu ter feito isso foi para evitar qualquer possível incompatibilidade com os sistemas já servidos pelo Apache (como os que utilizam mod_rewrite por meio de .htaccess).O “truque” para que nossa técnica funcione é o seguinte: fazer o nginx utilizar a porta 80 (HTTP) e deixar o Apache rodando em outra porta. No caso do Guia do PC, eu deixei o Apache rodando na porta 1234, mas você pode escolher qualquer outra porta, como 13579 ou 6969. Primeiro, vamos mudar a porta do Apache. Isso pode ser feito editando o arquivo /etc/apache2/ports.conf (em alguns casos, a configuração está em httpd.conf ou apache2.conf) e alterando as diretivas NameVirtualHost e Listen, como na imagem abaixo.
Trocando a porta do Apache no /etc/apache2/ports.conf
Dependendo de como você configurou seu servidor, talvez seja necessário alterar o arquivo de configuração específico do seu site (como os VirtualHosts, localizados em /etc/apache2/sites-enabled) para que ele também escute na porta desejada.
Agora, vamos configurar o /etc/nginx/nginx.conf, que fará nossa belezinha funcionar. Minha configuração foi baseada no exemplo da wiki do nginx.
user www-data www-data; worker_processes 4; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; worker_rlimit_nofile 8192; events { worker_connections 4096; } http { include mime.types; include /etc/nginx/proxy.conf; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] $status ' '"$request" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /srv/www/guiadopc.com.br/logs/nginx.log main; sendfile on; tcp_nopush on; server_names_hash_bucket_size 128; server { listen 80; server_name guiadopc.com.br www.guiadopc.com.br; access_log /srv/www/guiadopc.com.br/logs/nginx.log main; location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /srv/www/guiadopc.com.br/public_html; expires 30d; } location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ { root /srv/www/guiadopc.com.br/public_html; expires 30d; } location / { proxy_pass http://127.0.0.1:1234; } } }
Se você não tem um /etc/nginx/proxy.conf configurado, pode utilizar o arquivo abaixo (é o mesmo da wiki do nginx). Se você não criar esse arquivo, seu nginx não iniciará.
proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffers 32 4k;
Colocando o nginx e o Apache em ação!
Agora que você já configurou o Apache e o nginx, reinicie os dois servidores. Isto pode ser feito comservice apache2 restart && service nginx restart. Pronto, seu servidor já está funcionando!Tá, e o que eu ganhei com isso?
Ao acessar seu site, com certeza você já notou uma melhora no desempenho, especialmente se ele estiver em um VPS com poucos recursos e roda aplicativos pesados em PHP, como o WordPress. O Apache consome megabytes de RAM preciosos para cada requisição do usuário. Ao utilizar o nginx para servir seu conteúdo estático (imagens, CSS, JavaScript), você liberou grande parte dessas requisições e deixou o Apache apenas com a parte pesada do serviço.Outra vantagem muito importante: seu Apache estará menos congestionado. Quando um usuário visita seu site, o Apache abre uma conexão para que o usuário possa fazer o download do conteúdo. Essa conexão fica aberta até o término do download. Com o nginx como proxy reverso, acontecerá o seguinte: o nginx acessará os arquivos do Apache e, como o acesso é feito localmente (na mesma máquina ou em uma máquina da rede local), o download do conteúdo é praticamente instantâneo, liberando as conexões do Apache para outras requisições. O nginx foi feito para suportar muitas conexões, logo, você não terá problemas com isso.
Antes, com o Apache servindo todo o conteúdo, o consumo de memória do servidor do Guia do PC ficava por volta dos 900 MB, degradando significativamente a velocidade de carregamento do site e derrubando a máquina muitas vezes, por falta de recursos. Com o nginx servindo conteúdo estático…213 MB de RAM. Em horário de pico!
Isto é, um ganho de quase 80%! Isso porque, em alguns casos, o uso de memória cai para 160 MB. Sobra muito mais processamento e memória para quando você sair na página principal do Digg, não? O nginx também é muito, muito, mas muito mais rápido que o Apache. Não tem nem comparação. Faça testes com ferramentas como o ApacheBench e você saberá do que estou falando.
Uso de processador e HD (Fonte: http://blog.zhuzhaoyuan.com). A linha vermelha representa a separação entre Apache e nginx como proxy reverso.
Claro que não dá para fazer milagre. Esse baixo consumo de memória só foi obtido porque o servidor está rodando apenas com os serviços essenciais para que as coisas funcionem: Postfix, Apache, nginx, MySQL, SSH, firewall e nada mais (mesmo). O servidor de DNS é externo, o gerenciamento de arquivos é feito por SFTP ao invés de FTP (dispensando o uso de um servidor FTP e usando o próprio SSH para isso) e o Postfix apenas redireciona os e-mails para contas externas. Simples assim. Nada de painel de controle e outros serviços que deixam o servidor lerdo. Porém, se você não tem como deixar seu servidor bem enxuto, garanto que se beneficiará mesmo assim. Até a próxima!
Fonte:
Paulo Higa
Home-page: paulohiga.com/posts/nginx-proxy-reverso-php-apache.php
0 comentários:
Postar um comentário