Nginx Microcaching · 3 min read · Jan 22, 2026

Por Que Você Sempre Deve Usar Nginx Com Microcaching

Por Que Você Sempre Deve Usar Nginx Com Microcaching

Todo mundo sabe como é difícil extrair o máximo possível de seus servidores web. Na minha ocupação diária como engenheiro de hospedagem, isso significa que frequentemente recebo a mesma pergunta: “Uau, site legal, mas ele consegue lidar com tráfego intenso?”.

A situação “normal”

Um site “normal” rodando sob Apache com mod_php deve ser capaz de processar 20 requisições por segundo com facilidade, mas e se você receber 50 requisições por segundo (não é estranho com alguns sites, como sites de partidos políticos, etc.)? A resposta, na minha opinião, é abandonar o Apache, porque, como está agora, o Apache simplesmente não está mais dando conta.

SIM! Nginx!

Entra o Nginx! Então, o que você faz é configurar seu site no Nginx e executar um teste de carga rápido (por exemplo, 1000 requisições com 200 usuários simultâneos) e você verá que não consegue muito mais do que com o Apache, mas como? É bem simples, isso se deve ao fato de que o Nginx não possui um módulo php embutido, então você precisaria de um processador fastcgi para processar as páginas php (eu sugiro usar php-fpm, pois é melhor do que spawn-cgi). Então, o que eu devo usar agora, você pergunta? Use microcaching!

O que diabos é Microcaching?

O que é microcaching? Bem, a teoria é que você armazena em cache seus arquivos etc. por um curto período de tempo (como, por exemplo, 1 segundo). O que isso significa é que, quando um usuário solicita a página, ela é armazenada em cache, então a próxima solicitação de qualquer outra virá do cache, e com 100 usuários solicitando dentro de 5 segundos, apenas 1 em 20 usuários terá que construir a página completa (e com Nginx e um site bem estruturado, isso não é nenhum problema).

Eu não acredito!

Você melhor acreditar! Deixe-me dar um exemplo, pegue este site em que você está agora. Vamos supor que temos um teste de carga de 1000 requisições com 200 usuários simultâneos. Se você executar este site sob Apache, você obteria entre 10-40 requisições por segundo, no máximo! E seu servidor web estaria sob uma carga séria e você seria forçado a expandir seu ambiente. Sob Nginx com php-fpm sem microcaching, é a mesma coisa (talvez um pouco mais de requisições, mas seu servidor teria muitos processos php-fpm rodando para processar as requisições). Com microcaching, você obtém impressionantes 300-450 requisições por segundo!

Ok, me dê isso!

Microcaching é na verdade fácil de configurar, abaixo está um exemplo de configuração que você poderia rodar para qualquer site feito com PHP (neste caso, é específico para Wordpress). Dê uma olhada:

#
# seu site
#
server {
    listen       80;
    server_name  ;
    access_log    main;
    error_log ;
    root   ;
    location / {
        index  index.php index.html index.htm;
    }
    if (!-e $request_filename) {
        rewrite ^(.+)$ /index.php?q=$1 last;
    }
    location ~ \.php$ {
        # Configurar variáveis padrão
        set $no_cache "";
        # Se não for GET/HEAD, não cache e marque o usuário como não-cacheável por 1 segundo via cookie
        if ($request_method !~ ^(GET|HEAD)$) {
            set $no_cache "1";
        }
        # Remover cookie de não-cache se necessário
        # (por algum motivo, add_header falha se incluído no bloco if anterior)
        if ($no_cache = "1") {
            add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/";
            add_header X-Microcachable "0";
        }
        # Ignorar cache se o cookie de não-cache estiver definido
        if ($http_cookie ~* "_mcnc") {
                    set $no_cache "1";
        }
        # Ignorar cache se a flag estiver definida
        fastcgi_no_cache $no_cache;
        fastcgi_cache_bypass $no_cache;
        fastcgi_cache microcache;
        fastcgi_cache_key $server_name|$request_uri;
        fastcgi_cache_valid 404 30m;
        fastcgi_cache_valid 200 10s;
        fastcgi_max_temp_file_size 1M;
        fastcgi_cache_use_stale updating;
        fastcgi_pass localhost:9000;
        fastcgi_pass_header Set-Cookie;
        fastcgi_pass_header Cookie;
        fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param  PATH_INFO          $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;
        #fastcgi_intercept_errors on;
        include fastcgi_params;
    }
}

Você também deve colocar o formato de cache e a zona de cache em seu nginx.conf, adicione estas linhas ao seu bloco http {}:

fastcgi_cache_path /var/cache/nginx2 levels=1:2 keys_zone=microcache:5m max_size=1000m;
log_format cache '$remote_addr - $remote_user [$time_local] "$request" '
'$status $upstream_cache_status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

Experimente!

Eu encorajo todos a experimentar por si mesmos e ver a melhoria no desempenho! Eu sei que é uma grande mudança passar do Apache para o Nginx (em termos de configuração), mas você vai pegar o jeito muito rápido!

Confira http://livebyt.es para mais artigos que virão em breve!

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.