Em ambientes reais, principalmente quando lidamos com sistemas em produção, publicar uma aplicação web não se resume a expor uma porta no firewall. Esse tipo de abordagem simplista gera riscos de segurança, instabilidade e dificuldade de manutenção a médio e longo prazo.

Problemas desse cenário:

Sem HTTPS Porta exposta IP exposto Inseguro para fornecedores externos Difícil de manter e documentar

O objetivo era publicar o sistema Cotação Web para fornecedores externos, que originalmente rodava na porta 34001, garantido:

Segura Profissionalismo Padronização Não expor IP nem porta

A aplicação rodava sobre Java (GlassFish), no módulo web do ERP.

Soluções implementadas

Configuração de DNS no hPanel

O domínio já estava registrado no Registro.br e usando DNS da Hostinger. Criamos o registro no gerenciador DNS:

Tipo: A
Nome: contexto
Aponta para: IP público da empresa
TTL: 300

Firewall e NAT

Criei as regras de NAT Port Forward:

WAN TCP 80 → 192.168.50.235:80

WAN TCP 443 → 192.168.50.235:443

Assim, apenas as portas padrão web ficam expostas externamente.

Nginx como proxy reverso

Nginx foi utilizado como proxy reverso, protegendo o GlassFish

Instalação no servidor Linux (Xubuntu):

sudo apt update

sudo apt install nginx -y

systemctl status nginx

sudo nano /etc/nginx/sites-available/contexto

Configuração inicial:

server {
server_name contexto.empresa.com.br;

location / {
proxy_pass http://127.0.0.1:34001;
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;
}
}

Ativei o site:

sudo ln -s /etc/nginx/sites-available/contexto /etc/nginx/sites-enabled/

E desativei o site default (fundamental):

sudo rm /etc/nginx/sites-enabled/default

Certificado SSL – Let’s Encrypt

O HTTPS foi implementado com Let’s Encrypt, garantindo criptografia e confiança.

Instalação:

sudo apt install certbot python3-certbot-nginx -y

Geração do certificado:

sudo certbot --nginx -d contexto.empresa.com.br

Durante o processo:

Informei e-mail válido Aceitei os termos Confirmei o redirecionamento HTTP → HTTPS

Resultado:

Congratulations! You have successfully enabled HTTPS

Entendimento da aplicação

O Cotação Web não rodava na raiz /. O caminho correto da aplicação é:

/php/contexto/login.php

Por isso:

https://contexto.empresa.com.br não funcionava sozinho https://contexto.empresa.com.br/php/contexto/login.php funcionava

Embelezando a URL

Ajustei o Nginx para redirecionar automaticamente a raiz:

location = / {
return 302 /php/cotexto/login.php;
}

Configuração final do site (resumo):

server {
server_name contexto.empresa.com.br;

location = / {
return 302 /php/contexto/login.php;
}

location / {
proxy_pass http://127.0.0.1:34001;
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 https;
proxy_set_header X-Forwarded-Port 443;
}

listen 443 ssl;
}

Aplicação:

sudo nginx -t
sudo systemctl reload nginx

Resultado final

Agora, ao acessar:

https://contexto.empresa.com.br

O usuário é automaticamente redirecionado para o login do sistema, com:

🔒 HTTPS válido 🌐 Domínio profissional ❌ Sem IP exposto ❌ Sem porta exposta 🧱 GlassFish protegido atrás do Nginx.