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;
}
}
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_nameno coincide con el dominio del certificado. Si se incluyewww, escribe ambos nombres. - Cadena intermedia faltante: para
ssl_certificateno uses únicamentecertificate.crt; usafullchain.pem. - Error de permisos: si Nginx no puede leer la clave privada, revisa los ajustes de
chmod 600y 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.