Como configurar lemp com wordpress e let´s encrypt

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.

  1. Instalar: sudo apt update sudo apt install nginx -y
  2. Configurar Firewall (UFW): sudo ufw allow 'Nginx Full'
  3. 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).

  1. 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).

  1. Criar o arquivo de configuração:
    sudo nano /etc/nginx/sites-available/seusite.com
  2. Cole a configuração ao lado: Atenção: Ajuste o caminho do fastcgi_pass de acordo com a sua versão do PHP (ex: php8.1-fpm.sock ou php8.3-fpm.sock)





  3. Ativar o site e testar:
    sudo ln -s /etc/nginx/sites-available/seusite.com /etc/nginx/sites-enabled/
    sudo nginx -t
    Se o nginx -t der “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ísticaApache (LAMP)Nginx (LEMP)
ConfiguraçãoUsa .htaccess (fácil para usuários finais).Configuração centralizada (nginx.conf). Não lê .htaccess.
ArquiteturaProcesso por conexão (pode consumir muita RAM).Event-driven (assíncrono), lida com milhares de conexões com pouca RAM.
PHPGeralmente mod_php.Sempre via PHP-FPM (mais rápido em carga).
PermalinksAutomático via mod_rewrite.Requer a linha try_files $uri $uri/ /index.php... manualmente.

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:

  1. $uri: Verifica se existe um arquivo físico com esse nome (ex: uma imagem logo.png). Se existir, entrega o arquivo.
  2. $uri/: Verifica se existe um diretório com esse nome. Se existir, tenta abrir o index dele.
  3. /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:

  1. Acesse o painel do WordPress (/wp-admin).
  2. Vá em Configurações > Links Permanentes.
  3. Selecione a estrutura desejada (ex: “Nome do Post”).
  4. 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

  1. Verifique a sintaxe: sudo nginx -t
  2. Reinicie o Nginx: sudo systemctl reload nginx
  3. 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.

  1. No WordPress, instale o plugin Nginx Helper (autor: rtCamp).
  2. Ative-o e vá a Definições > Nginx Helper.
  3. Em Purging Method, selecione: nginx Fastcgi cache.
  4. Confirme se o caminho em Cache path é /var/cache/nginx/wordpress_cache (igual ao passo 1).
  5. 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:

How to install Engintron(NGINX) cPanel/WHM