Configuración de un proxy inverso Nginx + Let's Encrypt delante de Yucca
Introducción
En esta guía voy a describir cómo configurar Nginx y emitir un certificado SSL de Let's Encrypt que se renovará automáticamente. Nginx actuará como un servidor web simple delante de Yucca para terminar la sesión SSL y redirigir del puerto 80 al 443. ¿Por qué instalar Nginx si Yucca puede terminar SSL por sí misma e incluso tiene flags para eso? Es cierto, pero al ocupar el puerto 443, quedará no disponible para otro software y tendrá que usar uno diferente, y tampoco habrá redirección de HTTP a HTTPS; si esto le resulta aceptable, puede omitir sin problema la sección de instalación y configuración de Nginx, el Paso 1, e ir directamente al Paso 2. Realizaré todos los pasos en Ubuntu Server 22.04, pero todo funcionará igual en SUSE, CentOS, Fedora, Debian, etc. La única diferencia es que cada uno tiene su propio gestor de paquetes, pero espero que sepa distinguir apt de zypper 🙂
Paso 0. Preparación
Entonces, esto es lo que necesitaremos:
- Un host con una dirección IP pública
- Un dominio o subdominio que apunte a esa dirección
- Yucca instalada
En esta guía usaré el dominio foobar.yuccastream.com, su dominio será diferente.
nslookup foobar.yuccastream.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: foobar.yuccastream.com
Address: 128.140.2.103
Entonces, tengo Yucca, que está disponible en http://foobar.yuccastream.com:9910
Paso 1. Instalación y configuración de Nginx
Instalamos nginx:
sudo apt install nginx
Comprobamos http://foobar.yuccastream.com
A continuación, creamos un archivo de configuración para Yucca:
sudo nano /etc/nginx/conf.d/yucca.conf
Debe reemplazar el dominio foobar.yuccastream.com por el suyo
upstream yucca_upstream {
server 127.0.0.1:9910 fail_timeout=0;
}
server {
listen 80;
server_name foobar.yuccastream.com;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://yucca_upstream;
}
}
Guarde el archivo y verifique que la configuración sea correcta:
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Si todo es correcto, verá syntax is ok Recargamos la configuración de nginx:
nginx -s reload
Actualizamos la página y ya vemos la interfaz web de Yucca en http://foobar.yuccastream.com
Paso 2. Instalación de Certbot y emisión de un certificado Let's Encrypt
Instalamos los paquetes:
sudo apt install certbot python3-certbot-nginx
Emitimos un certificado para nuestro dominio:
Debe reemplazar el dominio foobar.yuccastream.com por el suyo
sudo certbot --nginx -d foobar.yuccastream.com
Certbot pedirá un E-mail (1); le recomendamos ingresar su casilla real, ya que si el certificado está por vencer y no logra renovarse automáticamente, Let's Encrypt le enviará una notificación al respecto. También deberá aceptar los términos y condiciones (2), (3). A continuación, certbot encontrará por sí mismo el archivo de configuración correcto con el dominio necesario, configurará la sección SSL y la redirección, y al final le mostrará un enlace.
Puede ver cómo quedó el resultado en el archivo /etc/nginx/conf.d/yucca.conf
upstream yucca_upstream {
server 127.0.0.1:9910 fail_timeout=0;
}
server {
server_name foobar.yuccastream.com;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://yucca_upstream;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/foobar.yuccastream.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/foobar.yuccastream.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = foobar.yuccastream.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name foobar.yuccastream.com;
return 404; # managed by Certbot
}
Recomendamos verificar que certbot haya creado un temporizador para la renovación del certificado; debe estar activo:
sudo systemctl status certbot.timer
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Fri 2023-09-22 11:54:02 UTC; 7min ago
Trigger: Fri 2023-09-22 14:13:25 UTC; 2h 11min left
Triggers: ● certbot.service
Sep 22 11:54:02 foobar systemd[1]: Started Run certbot twice daily.
Actualizamos la página http://foobar.yuccastream.com y vemos que todo ya funciona por HTTPS, y la redirección también funciona.
Paso 3. Configuración de seguridad
Configuramos el acceso por HTTPS a través de nginx, pero Yucca sigue estando disponible por HTTP en http://foobar.yuccastream.com:9910. Esto se debe a la siguiente configuración predeterminada:
listen_address = ":9910"
Vaya al archivo de configuración de Yucca y edite este parámetro:
sudo nano /opt/yucca/yucca.toml
Haga que Yucca escuche solo en localhost:
listen_address = "127.0.0.1:9910"
Y reinicie el servidor Yucca:
sudo systemctl restart yucca
Comprobamos que ahora en http://foobar.yuccastream.com:9910 no hay nada, mientras que https://foobar.yuccastream.com funciona correctamente.




