Introducción

Configurar HTTPS en un servidor web es hoy un requisito fundamental. Let's Encrypt ofrece certificados gratuitos y renovación automática. En este tutorial veremos cómo integrarlo con Nginx de forma limpia y automatizada.

Requisitos previos

  • Servidor con Ubuntu 20.04 o superior
  • Nginx instalado (apt install nginx)
  • Certbot instalado (apt install certbot python3-certbot-nginx)
  • Dominio apuntando a la IP del servidor

Obtener el certificado

sudo certbot --nginx -d tudominio.com -d www.tudominio.com

Certbot modifica automáticamente el bloque server de Nginx para añadir las directivas SSL y configurar la redirección de HTTP a HTTPS.

Configuración base de Nginx

Un bloque servidor típico tras ejecutar Certbot queda así:

server {
    listen 443 ssl;
    server_name tudominio.com;

    ssl_certificate /etc/letsencrypt/live/tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/tudominio.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/tudominio.com/public_html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

server {
    listen 80;
    server_name tudominio.com;
    return 301 https://$host$request_uri;
}

Renovación automática

Certbot instala un timer de systemd que renueva los certificados automáticamente antes de que expiren. Puedes verificarlo con:

sudo systemctl status certbot.timer

Para probar que la renovación funciona correctamente:

sudo certbot renew --dry-run

Script de recuperación rápida

Ante problemas de configuración, este script restaura Nginx a su estado base:

#!/bin/bash
sudo systemctl stop nginx
sudo rm -f /etc/nginx/sites-enabled/*
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
sudo systemctl start nginx
echo "Nginx restaurado a configuración por defecto"