🔐 Configurar HTTPS y redirección HTTP ➝ HTTPS con NGINX en un entorno real
Este documento detalla cómo proteger tu aplicación Laravel desplegada en un servidor real con HTTPS, utilizando NGINX y certificados SSL autosignados. También se configura la redirección automática desde HTTP a HTTPS para mejorar la seguridad.
1️⃣ Generar los certificados SSL en la máquina remota
Accede a tu servidor remoto y crea los certificados:
cd /etc/ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout private.key -out public.crt
Este comando generará:
/etc/ssl/private.key
→ Clave privada/etc/ssl/public.crt
→ Certificado público autosignado
🔐 Estos certificados son válidos para pruebas o entornos internos. Para producción real, usa Let's Encrypt (Certbot).
2️⃣ Modificar la configuración de NGINX (laravel.conf
)
Edita el archivo de configuración del sitio Laravel en /etc/nginx/sites-available/laravel.conf
.
🔁 Añadir un bloque server
para redirigir HTTP ➝ HTTPS
Este bloque intercepta cualquier conexión por el puerto 80 y la redirige al puerto seguro 443:
server {
listen 80;
server_name localhost;
return 301 https://$host$request_uri;
}
🔒 Configurar el bloque server
existente para escuchar en HTTPS (puerto 443)
Modifica el bloque principal para que escuche en el puerto 443 con SSL:
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/ssl/public.crt;
ssl_certificate_key /etc/ssl/private.key;
root /var/www/html/laravel-proyecto/public;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
error_page 404 /errors/404.html;
location = /errors/404.html {
root /var/www/html;
internal;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
📌 Notas:
ssl_certificate
: ruta al certificado público.ssl_certificate_key
: ruta a la clave privada.- Se mantiene toda la lógica de Laravel y la protección de archivos
.ht*
.
3️⃣ Validar y reiniciar NGINX
✅ Validar sintaxis de la configuración:
nginx -t
🔄 Reiniciar NGINX para aplicar los cambios:
nginx -s reload
🔍 Comprobación
- Accede a
http://IP-del-servidor
→ Debería redirigirte automáticamente ahttps://IP-del-servidor
- Acepta el certificado (si es autosignado).
- Laravel debería mostrarse correctamente con una conexión cifrada (candado).
🛡️ Recomendaciones de seguridad adicionales
- Utiliza certificados válidos con Let's Encrypt.
- Configura
ssl_protocols
yssl_ciphers
para mayor seguridad. - Usa redireccionamiento
Strict-Transport-Security
para forzar HTTPS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;