Pular para o conteúdo principal

Configurando NGINX como Proxy Reverso (HTTP/HTTPS)

atenção

⚠️ Todas as configurações feitas neste manual são exemplos simples e hipotéticos. Será necessário realizar adaptações conforme a topologia do seu ambiente.


🌐 Parte 1 - Configurando o NGINX como Balanceador

Passo 1 – Montando a Topologia

Adicione na camada de balanceamento o NGINX Balancer com IPv4 Público. Após isso, aplique a alteração.

Adicionando NGINX na topologia

Passo 2 – Apontamento de Domínio

  1. Aponte o seu domínio para o IP Público do NGINX.
  2. Acesse o diretório /etc/nginx/conf.d.

Acessando Diretório /etc/nginx/conf.d

  1. Crie um arquivo de configuração para seu domínio.

  2. Edite o arquivo criado com o conteúdo conforme exemplo abaixo.

Configuração do HTTP

server {
listen *:80;
listen [::]:80;
server_name dominio.com.br; #Coloque o domínio de acesso aqui
# A linha abaixo redireciona o acesso para HTTPS, na porta 443
# Caso ela esteja sendo utilizada, o restante do código desse bloco server abaixo dela não precisa ser utilizado
# return 301 https://$host$request_uri;

access_log /var/log/nginx/dominio.access_log main; #troque dominio pelo nome desejado para logs de acesso e erro
error_log /var/log/nginx/dominio.error_log info;

proxy_temp_path /var/nginx/tmp/;
proxy_connect_timeout 5s;

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

proxy_next_upstream error timeout http_500;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Remote-Port $remote_port;
proxy_set_header X-URI $request_uri;
proxy_set_header X-ARGS $args;
proxy_set_header Refer $http_refer;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

location / {
proxy_pass http://200.150.194.160; # IP e porta da Instancia onde está a aplicação
add_header Set-Cookie "SRVGROUP=$group; path=/; HttpOnly";
}
}

💾 Após editar, salve as alterações e teste a sintaxe dentro do SSH do nginx usando o comando nginx -t desta forma:

nginx -t

nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Se tudo estiver ok Reinicie a instância do NGINX

Reiniciando NGINx

📘 Documentação adicional: manual-nginx.jelastic.saveincloud.net


🔐 Adicionando o Certificado SSL (HTTPS)

Passo 1 – Instalação do Let’s Encrypt

Instale o add-on Let's Encrypt Free SSL, preenchendo com o domínio que aponta para o NGINX.

Instalando Let's Encrypt

Passo 2 – Porta 443 no NGINX

Edite o mesmo arquivo criado no NGINX, adicionando a configuração para HTTPS:

server {
listen *:443 ssl;
listen *:443 quic;
listen [::]:443 ssl;
listen [::]:443 quic;
http2 on;
server_name dominio.com.br; #Coloque o domínio de acesso aqui

ssl_certificate /var/lib/jelastic/SSL/jelastic.chain;
ssl_certificate_key /var/lib/jelastic/SSL/jelastic.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
add_header alt-svc 'h3=":443"; ma=86400';

access_log /var/log/nginx/dominio.com.br.access_log main; #troque dominio pelo nome desejado para logs de acesso
error_log /var/log/nginx/dominio.com.br.error_log info; #troque dominio pelo nome desejado para logs de erro

proxy_temp_path /var/nginx/tmp/;

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

location / {
proxy_pass http://127.0.0.1; # IP da Instancia onde está a aplicação
proxy_next_upstream error;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-URI $request_uri;
proxy_set_header X-ARGS $args;
proxy_set_header Refer $http_refer;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Ssl-Offloaded "1";
}
}

✅ Salve e reinicie o NGINX novamente. O seu site estará acessível com HTTPS e certificado válido.

dica

🔁 Configuração com upstream (Múltiplas Instâncias)

Se você possui mais de uma instância da sua aplicação (por exemplo, para escalabilidade ou alta disponibilidade), o ideal é usar o bloco upstream no NGINX. Com isso, o NGINX atuará como balanceador de carga entre essas instâncias.

📌 Exemplo de configuração com upstream

upstream app_backend {
server 192.168.0.101:8080;
server 192.168.0.102:8080;
server 192.168.0.103:8080;
# Você pode adicionar mais servidores conforme necessário
}

Depois, no seu bloco server, aponte o proxy_pass para esse grupo de servidores:

location / {
proxy_pass http://app_backend; # <--- coloque seu upstream aqui
...
...
}

ℹ️ Detalhes adicionais:

  • O NGINX vai distribuir as requisições entre as instâncias listadas no upstream.
  • O balanceamento padrão é round-robin, mas você pode usar outras opções como least_conn ou sticky_sessions, se necessário.

🛠️ Troubleshooting – Problemas Comuns

❌ Erro ao configurar HTTPS sem certificado

⚠️ Se você adicionar a configuração da porta 443 no NGINX sem instalar o certificado SSL (Let's Encrypt), o serviço pode falhar ao reiniciar, exibindo um erro semelhante a:

nginx: [emerg] BIO_new_file("/var/lib/jelastic/SSL/jelastic.chain") failed (SSL: error:02001002:system library:fopen:No such file or directory)

💡 Para evitar esse erro:

  • Certifique-se de instalar o certificado Let's Encrypt antes de ativar o bloco server na porta 443.
  • Caso ainda esteja testando ou queira evitar a falha temporariamente, comente ou remova a configuração HTTPS até o certificado estar disponível.