Configuração do Nginx + proxy reverso Let's Encrypt na frente do Yucca
Introdução
Neste guia, vou descrever como configurar o Nginx e emitir um certificado SSL Let's Encrypt, que será renovado automaticamente. O Nginx atuará como um servidor web simples na frente do Yucca para a terminação da sessão SSL e o redirecionamento da porta 80 para a 443.
Por que instalar o Nginx, afinal, se o próprio Yucca pode terminar o SSL e até tem flags para isso? É verdade, mas, ao ocupar a porta 443, ela ficará indisponível para outro software, sendo necessário usar outra porta, além de não haver redirecionamento de HTTP para HTTPS – se isso não for um problema para você, pode pular sem receio a seção de instalação e configuração do Nginx (Etapa 1) e ir direto para a Etapa 2.
Vou realizar todas as ações no Ubuntu Server 22.04, mas tudo funcionará da mesma forma no SUSE, CentOS, Fedora, Debian e assim por diante. A única diferença é que cada um tem seu próprio gerenciador de pacotes, mas espero que você saiba diferenciar o apt do zypper 🙂
Etapa 0. Preparação
Então, vamos precisar de:
- Um host com IP público
- Um domínio ou subdomínio apontando para esse endereço
- Yucca instalado
Neste guia, vou usar o domínio foobar.yuccastream.com, o seu domínio 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
Então, tenho o Yucca disponível no endereço http://foobar.yuccastream.com:9910
Etapa 1. Instalação e configuração do Nginx
Instalamos o nginx:
sudo apt install nginx
Verificamos http://foobar.yuccastream.com
Em seguida, criamos o arquivo de configuração para o Yucca:
sudo nano /etc/nginx/conf.d/yucca.conf
Você precisa substituir o domínio foobar.yuccastream.com pelo seu
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;
}
}
Salve o arquivo e verifique se a configuração está correta:
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Se tudo estiver correto, você verá syntax is ok Recarregamos a configuração do nginx:
nginx -s reload
Atualizamos a página e já vemos a interface web do Yucca em http://foobar.yuccastream.com
Etapa 2. Instalação do Certbot e emissão do certificado letsencrypt
Instalamos os pacotes:
sudo apt install certbot python3-certbot-nginx
Emitimos o certificado para o nosso domínio:
Você precisa substituir o domínio foobar.yuccastream.com pelo seu
sudo certbot --nginx -d foobar.yuccastream.com
O Certbot vai pedir para inserir um E-mail (1); recomendo usar seu e-mail real, pois, caso o certificado esteja prestes a expirar e não seja renovado automaticamente, o Let's Encrypt enviará uma notificação sobre isso. Também será necessário aceitar os termos e condições (2), (3). Em seguida, o certbot encontrará automaticamente o arquivo de configuração correto com o domínio necessário, configurará a seção de SSL e o redirecionamento, e ao final exibirá um link.
Você pode conferir o resultado final no arquivo /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
}
Recomendo verificar se o certbot criou um timer para a renovação do certificado; ele deve estar ativo:
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.
Atualizamos a página http://foobar.yuccastream.com e vemos que tudo já está funcionando via HTTPS, o redirecionamento também funciona.
Etapa 3. Configuração de segurança
Configuramos o acesso via HTTPS pelo nginx, mas o Yucca ainda está disponível via HTTP no endereço http://foobar.yuccastream.com:9910. Isso está relacionado a esta configuração padrão:
listen_address = ":9910"
Vamos até o arquivo de configuração do Yucca e ajustamos esse parâmetro:
sudo nano /opt/yucca/yucca.toml
Fazemos com que o Yucca escute apenas em localhost:
listen_address = "127.0.0.1:9910"
E reiniciamos o servidor Yucca:
sudo systemctl restart yucca
Verificamos: agora não há nada no endereço http://foobar.yuccastream.com:9910, e em https://foobar.yuccastream.com tudo funciona.




