A instalação WordPress é normalmente feita usando o Apache, mas existe uma alternativa muito boa a ele. O Nginx é um servidor web de código aberto, lançado em 2004, é um servidor web robusto, leve e muito poderoso! Existem diversos benefícios de usar ele no lugar do Apache, vamos falar um pouco dos lados positivos e negativos dessa configuração. Neste tutorial você vai aprender a instalar, configurar e otimizar o WordPress usando o Nginx como servidor web, PHP 7.4 e iremos também gerar o certificado SSL usando o letsencrypt para habilitar o protocolo HTTPS.
Porque usar o Nginx?
Existem diversos motivos para usar o Nginx, no meu caso decidi utilizar porque já tinha uma instalação para uma outra aplicação web com Nginx, para economizar recursos de máquinas decidi testar essa configuração de Wordpres + Nginx e fiquei muito feliz com o resultado. Outros motivos para utilizar: Ele suporta proxy reverso, cache embarcado muito eficiente (FastCGI), streaming de mídia, balanceamento de carga e muito mais. Ele foi desenhado para ter um baixo consumo de memória, muitas conexões simultâneas e otimizado para entregar arquivos estáticos como imagens e vídeos.
Pré-requisitos
- Servidor Ubuntu 18.04/20.04 com acesso Root e um IP público
- Um domínio para configurar o acesso e emitir o certificado SSL
Como instalar o WordPress com Nginx
Vamos para a parte técnica, acesse por ssh a máquina que você vai configurar e siga as próximas etapas:
1. Atualizando o Sistema
Primeiro atualize as referências dos pacotes do sistema.
$ sudo apt update
Agora atualize os programas para a última versão (Esse passo é opcional mas recomendado).
$ sudo apt upgrade
2. Instalando o Nginx
Vamos instalar o Nginx direto do repositório do Ubuntu.
$ sudo apt install nginx
Esse passo pode demorar um pouco, ele irá instalar e configurar o Nginx na sua máquina, ao finalizar verifique se o serviço está rodando.
$ sudo systemctl status nginx
3. Configurando o Firewall
Se você estiver em alguma máquina que esteja com o UFW habilitado, rode o seguinte comando para adicionar o Nginx como confiável.
$ sudo ufw allow 'Nginx Full'
4. Instalando e Configurando o Banco de Dados MySQL
Nossa instalação WordPress vai precisar de um banco de dados, ele pode ser tanto o MariaDB como o MySQL, neste tutorial utilizaremos a última opção.
$ sudo apt install mysql-server
Verifique se a instalação foi bem sucedida.
$ sudo systemctl status mysql
Agora precisamos entrar por linha de comando no MySQL para criar o banco de dados e usuário para o WordPress.
$ mysql -u root -p
Com o comando abaixo vamos criar um banco de dados chamado wordpress
com o charset utf8.
mysql> CREATE DATABASE wordpress CHARACTER SET utf8 COLLATE utf8_general_ci;
Agora precisamos criar um usuário e dar permissão a ele para acessar o nosso recém criado banco de dados. Altere SeuUsuario
para o nome de usuário desejado e a SuaSenha
também, lembre-se de usar uma senha bem forte.
mysql> GRANT ALL ON wordpress.* TO SeuUsuario @'localhost' IDENTIFIED BY 'SuaSenha';
Renove os privilégios do MySQL e saia da sua linha de comando.
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
Agora vamos executar uma verificação de segurança do MySQL, esse passo é opcional mas extremamente recomendado.
$ sudo mysql_secure_installation
5. Instalando o PHP 7.4
Primeiro execute os comandos abaixo para atualizar o sistema e adicionar e configurar o ppa do PHP em seu servidor.
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt update
Agora vamos instalar o PHP 7.4 e todos os plugins necessários para o WordPress.
$ sudo apt install php7.4-fpm php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip php7.4-intl unzip -y
Verifique se a instalação foi feita com sucesso.
$ php-fpm7.4 -v
Você pode alterar algumas configurações importantes, como tamanho máximo de upload e tempo de execução do PHP.
sudo nano /etc/php/7.4/fpm/php.ini
file_uploads = On
allow_url_fopen = On
upload_max_filesize = 100M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 360
max_input_vars = 3000
max_input_time = 1000
6. Instalando o WordPress
Primeiro vamos criar a pasta onde nossa instalação WordPress ficará.
$ sudo mkdir -p /var/www/html/seusite.com
Navega até a pasta e baixe a última versão do WordPress.
$ cd /var/www/html/seusite.com && wget https://wordpress.org/latest.tar.gz
Agora precisamos extrair e mover os arquivos para a raiz da pasta desejada.
$ tar xf latest.tar.gz && mv wordpress/* ../
Agora adiciona as permissões necessárias para o servidor web conseguir acessar os arquivos da instalação.
$ sudo chown -R www-data: /var/www/html/seusite.com
7. Configurando o Nginx para o WordPress
Agora precisamos configurar o Nginx para reconhecer o nosso domínio e instalação WordPress. Para isso vamos criar um arquivo na pasta /etc/nginx/sites-available
com o nome de nosso domínio. Com o seu editor preferido, nano no meu caso, crie o arquivo.
$ sudo nano /etc/nginx/sites-available
Copie e cole o seguinte conteúdo.
server{
listen 80;
listen [::]:80;
server_name seusite.com www.seusite.com;
root /var/www/seusite.com;
index index.php;
# Arquivos de Log
access_log /var/log/nginx/seusite.com.access.log;
error_log /var/log/nginx/seusite.com.error.log;
# Criamos a configuração para o Favicon básico
location = /favicon.ico {
try_files /favicon.ico @empty;
access_log off;
log_not_found off;
expires max;
}
# Configuração para o robots.txt para os buscadores
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
try_files $uri /index.php?$args;
}
# Configuração para executar a instalação do WordPress
location / {
try_files $uri $uri/ /index.php?$args;
}
# Incluimos a configuração do FastCGI
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
# Adicionamos uma configuração de cache para os arquivos de imagem, css e javascript
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires max;
log_not_found off;
}
}
Agora crie um atalho (symbolic link) para esse nosso arquivo recém criado.
$ sudo ln -s /etc/nginx/sites-available/seusite.com /etc/nginx/sites-enabled/
Agora reinicie o Nginx para que a nova configuração do site seja aplicada.
$ sudo systemctl restart nginx
8. Instalando o Let’s Encrypt e Gerando o Certificado SSL
Nessa etapa você já precisa ter configurado o apontamento do seu domínio para o seu servidor, vamos precisar que o servidor já esteja acessível pela internet pública. Instale e configure o Certbot, ele vai gerar e configurar automaticamente o certificado na instalação do Nginx.
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt install python-certbot-nginx
$ sudo certbot --nginx -d seusite.com -d www.seusite.com
Um pequeno questionário aparecerá, aceite os termos e responde todas as perguntas com cuidado. Na última etapa opte por redirecionar todo tráfego HTTP para HTTPS, ele irá se encarregar de configurar o redirecionamento automaticamente.
9. Configurando o WordPress
Se tudo deu certo, você poderá agora acessar a instalação WordPress em seu navegador, digitando o seu domínio, no caso deste tutorial https://seusite.com
. Agora é muito simples, basta seguir e responder o questionário de instalação do WordPress, informar o banco de dados, o usuário e a senha que configuramos na etapa 4.
Agora é só aproveitar a sua nova e otimizada instalação WordPress. Depois de configurado, utilize plugins de cache que tenham compatibilidade de configuração com o Nginx para otimizar ainda mais a velocidade do seu site.
Muy buen aporte.
Henrique Marques Fernandes, Excelente Artigo, eu estava com dificuldades para configurar e seguindo do passo a passo de seu artigo consegui fazer.
Consigo colocar para gerar certificado automaticamente após expirar?
Opa, fico feliz que tenha gostado Diego! Consegue sim, inclusive escreverei um tutorial sobre isso… Mas pra adiantar, da uma olhada nesse link https://onepagezen.com/letsencrypt-auto-renew-certbot-apache/
Abraços!
Parabens pelo artigo!
Estou tendo um problema com nginx e wordpress pois migramos do apache para ele.
Temos um site wordpress principal em https://sitexemplo.com.br e outros sites em subdiretorios com wordpress tambem, ex: https://sitexemplo.com.br/site1 e https://sitexemplo.com.br/site2 cujas estruturas de links permanentes funcionavam sem problema no apache.
Agora, ao tentar acessar uma pagina ou post nos sites 1 ou 2, retorna 404 do site principal.
Sabe o que podemos fazer? No apache era somente configurar o .htacess em cada instalacao que ficava ok.
Valeu Marcos!
Então, você vai precisar configurar no arquivo do passo 7 as localizações das demais instalações, porque esse arquivo provavelmente ta roteando qualquer url para tentar bater no index.php da raiz… Então, por exemplo, você poderia adicionar uma nova location:
location /wordpres2 {
try_files $uri $uri/ /wordpress2/index.php?$args;
}