A configuração LEMP (Linux, Engine-X/Nginx, MySQL/MariaDB, PHP) é frequentemente a escolha preferida para sites WordPress de alto tráfego devido à arquitetura orientada a eventos do Nginx, que lida com conexões simultâneas de forma mais eficiente que o Apache.
Aqui está o guia passo a passo para Ubuntu 20.04/22.04/24.04.
Passo 1: Instalar o Nginx
Diferente do Apache, o Nginx é leve e serve arquivos estáticos muito rapidamente.
- Instalar:
sudo apt update sudo apt install nginx -y - Configurar Firewall (UFW):
sudo ufw allow 'Nginx Full' - Verificar status: Acesse o IP do servidor no navegador. Você deve ver a tela “Welcome to nginx”.
Passo 2: Instalar e Configurar MariaDB
O processo é idêntico ao do LAMP.
Instalar e proteger: sudo apt install mariadb-server -y sudo mysql_secure_installation
Criar Banco de Dados:
mysql -u root -p
CREATE DATABASE wordpress_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'senha_forte'; GRANT ALL ON wordpress_db.* TO 'wp_user'@'localhost'; FLUSH PRIVILEGES; EXIT;
Passo 3: Instalar o PHP (PHP-FPM)
O Nginx não processa PHP nativamente; ele passa a requisição para o PHP-FPM (FastCGI Process Manager).
- Instalar o PHP-FPM e extensões:
sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip imagick -y
Verificar a versão do PHP instalada: É crucial saber a versão (ex: 8.1, 8.2, 8.3) para configurar o Nginx corretamente no próximo passo. digite: php -v
Passo 4: Configurar o Bloco de Servidor Nginx
Esta é a parte mais crítica e onde difere do Apache (não há .htaccess aqui).
- Criar o arquivo de configuração:
sudo nano /etc/nginx/sites-available/seusite.com - Cole a configuração ao lado: Atenção: Ajuste o caminho do
fastcgi_passde acordo com a sua versão do PHP (ex:php8.1-fpm.sockouphp8.3-fpm.sock) - Ativar o site e testar:
sudo ln -s /etc/nginx/sites-available/seusite.com /etc/nginx/sites-enabled/sudo nginx -t
Se onginx -tder “syntax is ok”, prossiga:sudo systemctl reload nginx
server {
listen 80;
server_name seusite.com www.seusite.com;
root /var/www/seusite.com;
index index.php index.html index.htm;
# Logs
access_log /var/log/nginx/seusite.com.access.log;
error_log /var/log/nginx/seusite.com.error.log;
# Regra principal para WordPress (Permalinks)
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
# Processamento PHP
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# VERIFIQUE A VERSÃO ABAIXO (ls /run/php/)
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
# Bloquear arquivos sensíveis e .htaccess (inútil no Nginx mas bom esconder)
location ~ /\.ht {
deny all;
}
# Otimização para arquivos estáticos (Cache no navegador)
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
}Passo 5: Baixar o WordPress
sudo mkdir -p /var/www/seusite.com cd /tmp curl -O https://wordpress.org/latest.tar.gz tar xzvf latest.tar.gz sudo cp -a /tmp/wordpress/. /var/www/seusite.com
Permissões Corretas:
sudo chown -R www-data:www-data /var/www/seusite.com sudo chmod -R 755 /var/www/seusite.com
Passo 6: HTTPS com Let’s Encrypt
Instale o plugin do Certbot específico para Nginx.
Instalar:
sudo apt install certbot python3-certbot-nginx -y
Gerar Certificado:
sudo certbot --nginx
O Certbot lerá seu bloco de servidor (Passo 4) e configurará o SSL automaticamente, perguntando se você deseja forçar o redirecionamento HTTPS (Recomendado: escolha 2).
Principais Diferenças: Apache vs. Nginx
| Característica | Apache (LAMP) | Nginx (LEMP) |
| Configuração | Usa .htaccess (fácil para usuários finais). | Configuração centralizada (nginx.conf). Não lê .htaccess. |
| Arquitetura | Processo por conexão (pode consumir muita RAM). | Event-driven (assíncrono), lida com milhares de conexões com pouca RAM. |
| PHP | Geralmente mod_php. | Sempre via PHP-FPM (mais rápido em carga). |
| Permalinks | Automático via mod_rewrite. | Requer a linha try_files $uri $uri/ /index.php... manualmente. |
Utilizar permalinks com nginx
Essa é a dúvida mais comum na migração de Apache para Nginx. Como o Nginx não lê arquivos .htaccess, você precisa traduzir a lógica de reescrita (rewrite rules) diretamente no arquivo de configuração do bloco do servidor (server block).
Para fazer os Links Permanentes (Permalinks) funcionarem — por exemplo, transformar site.com/?p=123 em site.com/nome-do-post — siga estes passos:
1. Edite o arquivo de configuração do seu site
Abra o arquivo de configuração do seu domínio (geralmente em /etc/nginx/sites-available/):
sudo nano /etc/nginx/sites-available/seusite.com
2. Configure a diretiva try_files
Localize o bloco location /. Ele provavelmente está assim ou vazio:
Nginx
location / {
# Conteúdo antigo ou apenas try_files $uri $uri/ =404;
}
Substitua (ou edite) esse bloco para ficar exatamente assim:
Nginx
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
O que essa linha mágica faz?
O Nginx processa essa ordem da esquerda para a direita:
$uri: Verifica se existe um arquivo físico com esse nome (ex: uma imagemlogo.png). Se existir, entrega o arquivo.$uri/: Verifica se existe um diretório com esse nome. Se existir, tenta abrir o index dele./index.php$is_args$args: Se não achou arquivo nem pasta, envia a requisição para o WordPress (index.php) processar. É aqui que o WordPress “lê” a URL amigável e mostra a página correta.
3. Exemplo Completo do Bloco (Contexto)
Para garantir que você está inserindo no lugar certo, seu arquivo deve se parecer com este:
Nginx
server {
listen 80;
server_name seusite.com;
root /var/www/seusite.com;
index index.php index.html;
# --- AQUI ESTÁ A CONFIGURAÇÃO DOS PERMALINKS ---
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
# -----------------------------------------------
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock; # Ajuste sua versão do PHP
}
}
4. Teste e Reinicie
Sempre verifique a sintaxe antes de reiniciar para não derrubar o servidor.
sudo nginx -t
Se der “syntax is ok”:
sudo systemctl reload nginx
5. Salve os Permalinks no WordPress
Este passo é crucial e muitas vezes esquecido:
- Acesse o painel do WordPress (
/wp-admin). - Vá em Configurações > Links Permanentes.
- Selecione a estrutura desejada (ex: “Nome do Post”).
- Clique em Salvar Alterações.
Isso força o WordPress a atualizar sua estrutura interna de rotas para coincidir com a nova liberdade que o Nginx deu.
Próximo passo módulo FastCGI Cache
Uma das maiores vantagens de usar Nginx é o módulo FastCGI Cache, que permite fazer cache da página inteira diretamente na memória RAM, eliminando a necessidade de plugins de cache pesados no WordPress. Abaixo segue instruções para configurar o módulo FastCGI.
Passo 1: Definir a Zona de Cache (nginx.conf)
Primeiro, precisamos dizer ao Nginx onde guardar o cache e qual o tamanho permitido.
Edite o ficheiro de configuração principal:sudo nano /etc/nginx/nginx.conf
Dentro do bloco http { ... }, antes da linha include /etc/nginx/sites-enabled/*;, adicione o seguinte:
Nginx
# Configuração FastCGI Cache fastcgi_cache_path /var/cache/nginx/wordpress_cache levels=1:2 keys_zone=WORDPRESS:100m max_size=10g inactive=120m use_temp_path=off; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
- keys_zone: Nomeámos a zona como “WORDPRESS” com 100MB de RAM para armazenar as chaves.
- max_size: 10GB de espaço em disco para o cache (ajuste conforme o seu disco).
- inactive: Se um cache não for visitado em 120 minutos, é apagado.
Passo 2: Configurar as Exceções (No seu Virtual Host)
Não queremos fazer cache de tudo. Painéis de administração, utilizadores com sessão iniciada e páginas de checkout (se usar WooCommerce) não podem ter cache.
Edite o ficheiro do seu site:
sudo nano /etc/nginx/sites-available/seusite.com
Adicione este bloco antes do bloco location
# Lógica para ignorar o cache (Skip Cache)
set $skip_cache 0;
# POST requests e URLs com query string devem ir diretos ao PHP
if ($request_method = POST) { set $skip_cache 1; }
if ($query_string != "") { set $skip_cache 1; }
# Não fazer cache de URIs especiais (Admin, Feed, XMLRPC)
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|^/feed/*|/index.php|sitemap(_index)?.xml") {
set $skip_cache 1;
}
# Não fazer cache para utilizadores logados ou que comentaram recentemente
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $skip_cache 1;
}Passo 3: Ativar o Cache no Bloco PHP
Ainda dentro do mesmo ficheiro (sites-available/seusite.com), localize o seu bloco location ~ \.php$. Terá de adicionar as diretivas de cache lá dentro.
Deverá ficar parecido com isto:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# Confirme se o socket corresponde à sua versão (ex: php8.1-fpm.sock)
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
# --- ATIVAÇÃO DO CACHE ---
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
# Aplica as regras de exclusão que criámos acima
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
# Adiciona um cabeçalho para sabermos se o cache funcionou (HIT ou MISS)
add_header X-FastCGI-Cache $upstream_cache_status;
}
Passo 4: Aplicar e Testar
- Verifique a sintaxe:
sudo nginx -t - Reinicie o Nginx:
sudo systemctl reload nginx - Teste: Abra o seu site numa janela anónima (para não estar logado). Inspecione a página (F12), vá à aba Network, recarregue a página e clique no primeiro recurso (o seu domínio).Procure nos “Response Headers”:
X-FastCGI-Cache: MISS(Na primeira visita, o Nginx está a criar o cache).X-FastCGI-Cache: HIT(Recarregue a página. Se vir HIT, o cache está a funcionar e a página foi servida instantaneamente).
Passo 5: Instalar Plugin para Limpeza Automática
O Nginx não sabe quando você publica um novo artigo. Precisa de um plugin no WordPress para avisar o Nginx para limpar o cache.
- No WordPress, instale o plugin Nginx Helper (autor: rtCamp).
- Ative-o e vá a Definições > Nginx Helper.
- Em Purging Method, selecione:
nginx Fastcgi cache. - Confirme se o caminho em Cache path é
/var/cache/nginx/wordpress_cache(igual ao passo 1). - Ative as opções de limpeza (Purge) quando um post é editado, publicado ou apagado.
Clique aqui e consulte nossos planos de Gerenciamento de Servidor
Veja também:
Antivírus, Antimalware, Antiphishing no Almalinux ou CentOS com ClamAV
Como Instalar Openlitespeed no Ubuntu 20.04
Criando atalho para listar diretórios e arquivos em ordem crescente
Guia Completo de Administração de Servidores Linux para Iniciantes
In English:

