Instalación de SSL en Nginx y redirección 301 de HTTP a HTTPS

Nginx es uno de los servidores web más utilizados del mundo gracias a su rendimiento y su bajo consumo de memoria. En esta guía te mostraremos, con un ejemplo completo de bloque server, cómo definir un certificado SSL gratuito en Nginx y cómo redirigir todo el tráfico HTTP al HTTPS seguro.

Archivos necesarios

Nginx espera el certificado y la cadena intermedia en un único archivo combinado. Para ello, fullchain.pem es ideal; contiene a la vez tu certificado y la cadena de la CA. Además, se necesita private.key como clave privada.

  • fullchain.pem → certificado + cadena intermedia (ssl_certificate)
  • private.key → clave privada (ssl_certificate_key)

Si no dispones de estos dos archivos, verifica tu dominio con nuestro asistente de SSL gratuito y obtén los archivos fullchain.pem y private.key del paquete ZIP que se descarga.

Paso 1 — Sube los archivos al servidor

Copia los archivos a un directorio seguro y restringe los permisos. Es fundamental que la clave privada solo pueda ser leída por root:

sudo mkdir -p /etc/nginx/ssl/tudominio.com
sudo cp fullchain.pem /etc/nginx/ssl/tudominio.com/
sudo cp private.key   /etc/nginx/ssl/tudominio.com/
sudo chmod 600 /etc/nginx/ssl/tudominio.com/private.key

Paso 2 — Configura el bloque server

Abre el archivo de configuración de tu sitio (p. ej. /etc/nginx/sites-available/tudominio.com). El siguiente ejemplo incluye dos bloques server: uno que redirige HTTP a HTTPS y otro que sirve TLS con ajustes seguros:

# 1) Redirige permanentemente todas las peticiones HTTP a HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name tudominio.com www.tudominio.com;
    return 301 https://$host$request_uri;
}

# 2) Servidor HTTPS
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name tudominio.com www.tudominio.com;

    ssl_certificate     /etc/nginx/ssl/tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/tudominio.com/private.key;

    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    ssl_session_timeout 1d;
    ssl_session_cache   shared:SSL:10m;

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

    location / {
        try_files $uri $uri/ =404;
    }
}
Imagen: <un bloque server de Nginx abierto en un editor>
Dos bloques server: uno para la redirección 301 y otro para TLS en el puerto 443.

Paso 3 — Prueba la configuración y recárgala

Para detectar errores de sintaxis, prueba siempre antes de reiniciar Nginx:

sudo nginx -t

Si la salida dice syntax is ok y test is successful, recarga el servicio de forma suave (sin interrupción):

sudo systemctl reload nginx

Paso 4 — Verificación

Puedes comprobar desde la línea de comandos que la redirección y el certificado funcionan:

# Para ver la cabecera de redirección 301
curl -I http://tudominio.com

# Para verificar que la cadena del certificado se sirve completa
echo | openssl s_client -connect tudominio.com:443 -servername tudominio.com

En el primer comando deberías ver HTTP/1.1 301 Moved Permanently y Location: https://.... En el segundo comando, asegúrate de que la cadena aparece listada completa, desde el certificado hasta la cadena intermedia.

Errores comunes

  • SSL_ERROR_BAD_CERT_DOMAIN: el server_name no coincide con el dominio del certificado. Si se incluye www, escribe ambos nombres.
  • Cadena intermedia faltante: para ssl_certificate no uses únicamente certificate.crt; usa fullchain.pem.
  • Error de permisos: si Nginx no puede leer la clave privada, revisa los ajustes de chmod 600 y de propiedad.

Resumen

SSL en Nginx consiste simplemente en definir ssl_certificate y ssl_certificate_key y en hacer que un bloque aparte redirija todo el tráfico HTTP a HTTPS mediante un 301. Si no tienes certificado, obtén tu certificado de 90 días con nuestro asistente de SSL gratuito, extrae del ZIP los archivos fullchain.pem y private.key y adapta el bloque anterior.