Configuración de Nginx como Proxy Inverso con HTTPS y WordPress (Let’s Encrypt y Cloudflare DNS)

Si quieres aprender a configurar un certificado SSL con Let’s Encrypt y Cloudflare en tu servidor local, estás en el lugar correcto. En este tutorial, te guiaré paso a paso para que tu sitio web tenga una conexión segura, utilizando Apache y Nginx como proxy inverso.

Requisitos Previos

Antes de comenzar, asegúrate de tener:

  • Un dominio configurado en Cloudflare
  • Un servidor Debian o similar con acceso SSH
  • Apache y Nginx instalados
  • Una máquina virtual o servidor con IP accesible

Paso 1: Acceder a Cloudflare y Configurar el Dominio

Lo primero que debes hacer es ingresar a tu cuenta de Cloudflare y asegurarte de que tu dominio esté correctamente configurado. Si no lo has hecho aún, revisa el vídeo anterior donde explico cómo enlazar un dominio a Cloudflare.

Una vez dentro de Cloudflare:

  1. Accede a la configuración de tu dominio.
  2. Ve a la sección DNS y añade un nuevo registro A para el subdominio (por ejemplo, nextcloud.repasomates.com) apuntando a la IP de tu servidor.
  3. Deshabilita el proxy de Cloudflare temporalmente para evitar problemas con la generación del certificado.

Paso 2: Conectar al Servidor y Comprobar la Resolución del Dominio

Desde tu terminal, conéctate a tu servidor por SSH:

ssh usuario@192.168.1.210

Para verificar que el dominio apunta a la IP correcta, usa el siguiente comando:

nslookup nextcloud.repasomates.com

Si responde correctamente con la IP configurada en Cloudflare, podemos continuar.

Paso 3: Instalar y Configurar Apache

Para servir nuestra aplicación, instalaremos Apache y lo configuraremos en el puerto 8080.

sudo apt update
sudo apt install apache2 -y

Modificamos los puertos de Apache:

sudo nano /etc/apache2/ports.conf

Cambiamos la línea:

Listen 80

Por esta otra:

Listen 8080

Ahora, creamos un VirtualHost en Apache para el subdominio:

sudo nano /etc/apache2/sites-available/nextcloud.repasomates.com.conf

Pegamos la siguiente configuración:

<VirtualHost *:8080>
    DocumentRoot /home/guillem/public_html/repasodemates.com/nextcloud
    <Directory /home/guillem/public_html/repasodemates.com/nextcloud>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Guardamos los cambios y habilitamos el sitio:

sudo a2ensite nextcloud.repasomates.com.conf
sudo systemctl restart apache2

Paso 4: Generar un Certificado SSL con Let’s Encrypt

Para obtener un certificado SSL, instalamos Certbot y el plugin de Cloudflare:

sudo apt install certbot python3-certbot-dns-cloudflare -y

Creamos un archivo de configuración con nuestra API Key de Cloudflare:

sudo nano /etc/letsencrypt/cloudflare.ini

Añadimos el siguiente contenido:

dns_cloudflare_api_token = TU_TOKEN_AQUI

Protegemos el archivo:

sudo chmod 600 /etc/letsencrypt/cloudflare.ini

Ejecutamos el siguiente comando para solicitar el certificado:

sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini -d nextcloud.repasomates.com

Si todo va bien, el certificado se generará en la carpeta:

/etc/letsencrypt/live/nextcloud.repasomates.com/

Paso 5: Configurar Nginx como Proxy Inverso

Instalamos Nginx:

sudo apt install nginx -y

Creamos la configuración del subdominio en Nginx:

sudo nano /etc/nginx/sites-available/nextcloud.repasomates.com

Pegamos la siguiente configuración:

server {
    listen 443 ssl;
    server_name nextcloud.repasomates.com;

    ssl_certificate /etc/letsencrypt/live/nextcloud.repasomates.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nextcloud.repasomates.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

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

Guardamos y activamos el sitio:

sudo ln -s /etc/nginx/sites-available/nextcloud.repasomates.com /etc/nginx/sites-enabled/
sudo systemctl restart nginx

Paso 6: Pruebas Finales y Seguridad

Para asegurarnos de que todo funciona correctamente:

  • Accede a https://nextcloud.repasomates.com y verifica que carga con el certificado SSL.
  • Si la versión http:// sigue funcionando, revisa la configuración de redirección en Nginx.
  • Comprueba que el puerto 8080 no es accesible desde el exterior, asegurándote de que solo Nginx pueda comunicarse con Apache.

Puedes reforzar la seguridad bloqueando accesos directos al puerto 8080 en Apache:

sudo nano /etc/apache2/ports.conf

Y añadiendo:

Listen 127.0.0.1:8080

Reiniciamos Apache:

sudo systemctl restart apache2

Conclusión

Ahora tu servidor tiene un certificado SSL válido con Let’s Encrypt y Cloudflare. Esto asegura que tu sitio web sea accesible de forma segura y sin advertencias del navegador.

Si te ha servido este tutorial, déjame un comentario, dale like y suscríbete para más contenido sobre servidores y configuraciones avanzadas. Nos vemos en el próximo vídeo, donde instalaremos Nextcloud.

Comentarios

No comments found.