> Versão Markdown de https://yucca.app/pt/docs/guides/Nginx/. Índice da documentação: [llms.txt](https://yucca.app/pt/llms.txt), texto completo em um arquivo: [llms-full.txt](https://yucca.app/pt/llms-full.txt). Qualquer página está disponível como Markdown: adicione `.md` à URL sem a barra final.

# 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.<br />Por que instalar o Nginx, afinal, se o próprio Yucca pode terminar o SSL e até tem [flags](https://yucca.app/pt/docs/configuration.md#cert_file) 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.<br />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:

1. Um host com IP público
2. Um domínio ou subdomínio apontando para esse endereço
3. [Yucca instalado](https://yucca.app/pt/docs/install.md)

Neste guia, vou usar o domínio `foobar.yuccastream.com`, o seu domínio será diferente.

```sh
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

```

[![nginx1](/pt/assets/images/nginx1-f71285a8a03081e772a4456d3f3b9241.png)](https://yucca.app/pt/assets/files/nginx1-f71285a8a03081e772a4456d3f3b9241.png)

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:

```sh
sudo apt install nginx

```

Verificamos `http://foobar.yuccastream.com`

[![nginx2](/pt/assets/images/nginx2-e7de29f0a6cc5a16824219d0540ab0f1.png)](https://yucca.app/pt/assets/files/nginx2-e7de29f0a6cc5a16824219d0540ab0f1.png)

Em seguida, criamos o arquivo de configuração para o Yucca:

```sh
sudo nano /etc/nginx/conf.d/yucca.conf

```

> **Aviso.** Você precisa substituir o domínio `foobar.yuccastream.com` pelo seu

```sh
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:

```sh
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:

```sh
nginx -s reload

```

Atualizamos a página e já vemos a interface web do Yucca em `http://foobar.yuccastream.com`

[![nginx3](/pt/assets/images/nginx3-4ca009416e84aca46f3096bd20af3521.png)](https://yucca.app/pt/assets/files/nginx3-4ca009416e84aca46f3096bd20af3521.png)

## Etapa 2. Instalação do Certbot e emissão do certificado letsencrypt

Instalamos os pacotes:

```sh
sudo apt install certbot python3-certbot-nginx

```

Emitimos o certificado para o nosso domínio:

> **Aviso.** Você precisa substituir o domínio `foobar.yuccastream.com` pelo seu

```sh
sudo certbot --nginx -d foobar.yuccastream.com

```

[![nginx4](/pt/assets/images/nginx4-257ee55cf8f90940b2c91fc87749bcb0.png)](https://yucca.app/pt/assets/files/nginx4-257ee55cf8f90940b2c91fc87749bcb0.png)

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`

```sh

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:

```sh
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.

[![nginx5](/pt/assets/images/nginx5-8a3f66842bdeabfcf25bef14aa513371.png)](https://yucca.app/pt/assets/files/nginx5-8a3f66842bdeabfcf25bef14aa513371.png)

## 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:

```sh
listen_address = ":9910"

```

Vamos até o arquivo de configuração do Yucca e ajustamos esse parâmetro:

```sh
sudo nano /opt/yucca/yucca.toml

```

Fazemos com que o Yucca escute apenas em localhost:

```sh
listen_address = "127.0.0.1:9910"

```

E reiniciamos o servidor Yucca:

```sh
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.
