Compilando e Configurando Suporte a HTTPS no Nginx a Partir do Código-Fonte

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

Tags: nginx ssl HTTPS openssl Linux

Publicado em 6-23 16:36