Preparação e Verificação Inicial
Este procedimento é exclusivo para instalações do Nginx realizadas via compilação de código-fonte. Se a sua instalação foi feita através de gerenciadores de pacotes, o processo de adição de módulos requer uma abordagem diferente.
Primeiramente, verifique se o módulo SSL já está habilitado no seu binário atual:
/usr/local/nginx/sbin/nginx -V
Procure pela flag --with-http_ssl_module na saída. Se ela não estiver presente, será necessário recompilar o binário.
Recompilação do Binário do Nginx
Acesse o diretório onde o código-fonte do Nginx foi originalmente extraído. Neste exemplo, utilizaremos /opt/nginx-source.
cd /opt/nginx-source
./configure --with-http_ssl_module
make
Após a compilação concluir, substitua o binário antigo manualmente. Não execute make install, pois isso pode sobrescrever suas configurações existentes.
# Criar backup do binário atual
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_backup
# Copiar o novo binário compilado
cp /opt/nginx-source/objs/nginx /usr/local/nginx/sbin/
Execute o upgrade suave para aplicar as alterações sem interromper o serviço:
cd /opt/nginx-source
make upgrade
Confirme novamente se o módulo foi adicionado com sucesso:
/usr/local/nginx/sbin/nginx -V
Geração de Certificado SSL Autoassinado
Para ambientes de teste ou internos, você pode gerar seus próprios certificados. Utilizaremos 2048 bits para a chave RSA, garantindo um padrão de segurança adequado.
1. Gere uma chave RSA protegida por senha:
openssl genrsa -des3 -out servidor.key 2048
2. Crie uma cópia da chave sem a proteção de senha (necessário para reinicializações automáticas do Nginx):
openssl rsa -in servidor.key -out servidor_sem_senha.key
3. Gere o pedido de assinatura de certificado (CSR):
openssl req -new -key servidor.key -out servidor.csr
4. Assine o certificado com validade de um ano:
openssl x509 -req -days 365 -in servidor.csr -signkey servidor.key -out servidor.crt
5. Mova os arquivos para os diretórios padrão do sistema:
cp servidor.crt /etc/ssl/certs/
cp servidor_sem_senha.key /etc/ssl/private/
Configuração do Virtual Host com SSL
Edite o arquivo de configuração principal do Nginx para habilitar o tráfego criptografado e configurar o redirecionamento forçado de HTTP para HTTPS.
vim /usr/local/nginx/conf/nginx.conf
Substitua o conteúdo pela seguinte configuração otimizada, que inclui práticas modernas de segurança SSL/TLS e redirecionamento de porta:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# Bloco para redirecionamento HTTP (80) para HTTPS (443)
server {
listen 80;
server_name 10.10.10.5;
return 301 https://$host$request_uri;
}
# Bloco principal para HTTPS
server {
listen 443 ssl;
server_name 10.10.10.5;
root /var/www/app/public;
index index.php index.html;
# Configurações do Certificado
ssl_certificate /etc/ssl/certs/servidor.crt;
ssl_certificate_key /etc/ssl/private/servidor_sem_senha.key;
# Otimizações e Segurança SSL
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# Roteamento e FastCGI
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
# Cache para arquivos estáticos
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
}
}
Após salvar as alterações, recarregue a configuração do Nginx para aplicar as mudanças sem derrubar as conexões ativas:
/usr/local/nginx/sbin/nginx -s reload