Em ambientes corporativos, é cada comum publicar aplicações web “atrás” de um proxy reverso. Essa arquitetura permite centralizar o acesso aos sistemas, melhorar a segurança, simplificar o gerenciamento de certificados digitais e padronizar a publicação de serviços internos na internet ou na rede corporativa. Seguindo esse padrão de arquitetura, vamos abordar como publicar o Azure DevOps Server (On-Premise) por meio de um proxy reverso Nginx, mantendo o servidor da aplicação protegido na rede interna e disponibilizando seu acesso por meio de um endereço centralizado.
Imagine o seguinte cenário:
- O Azure DevOps Server está instalado em um servidor interno, acessível pelo endereço http://10.0.0.20:8080 .
- O Nginx em um servidor 10.0.0.10, responsável por receber as conexões HTTPS.
- Os usuários acessam o sistema pelo endereço https://devops.suaempresa.com.br.conf .
O fluxo de comunicação fica assim:
Usuário → HTTPS → Nginx → HTTP/HTTPS interno → Azure DevOps Server
Dessa maneira, o usuário não precisa conhecer o endereço interno do servidor Azure DevOps. O acesso ocorre por meio de um endereço DNS padronizado, enquanto o Nginx encaminha as requisições para a aplicação.
Antes de prosseguir é necessário garantir que o DNS aponte para o endereço do servidor Nginx e que a comunicação entre o proxy e o Azure DevOps esteja liberada no firewall.
Configurando o Azure DevOps Server
Certifique que a URL pública do Azure DevOps está configurada corretamente
No IIS desse servidor, vá no site do Azure DevOps e:
- Em autenticação, certifique-se que está apenas Windows Authentication ;
- Edite essa autenticação e (em Providers), deixe apenas Negotiate ;
- Em configuration editor, configure:
- Em system.webServer/security/authentication/windowsAuthentication e altere a propriedade authPersistNonNTLM para a opção False ;
- Em system.webServer/security/authentication/windowsAuthentication, expanda extendedProtection e altere a propriedade flags para a opção Proxy .
Reinicie o IIS.
Configurando o proxy reverso
Não iremos detalhar como instalar o proxy reverso e nem configurar o certificado digital. Caso precise ainda criar esse ambiente temos posts detalhando isso. No proxy configure a seguinte conexão no arquivo devops.suaempresa.com.br.conf
server {
listen 443 ssl;
server_name devops.suaempresa.com.br;
ssl_certificate /etc/nginx/ssl/devops.crt;
ssl_certificate_key /etc/nginx/ssl/devops.key;
client_max_body_size 0;
location / {
proxy_pass http://10.0.0.20:8080;
proxy_http_version 1.1;
proxy_set_header Connection "";
# Preservar o host público do Azure DevOps
proxy_set_header Host $host;
# Informações de encaminhamento
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-Host $host;
# Opcional: explícito, embora normalmente seja o padrão
proxy_set_header Authorization $http_authorization;
# Operações Git, LFS e respostas longas
proxy_buffering off;
proxy_request_buffering off;
proxy_connect_timeout 60s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
# TLS com o servidor de origem
#proxy_ssl_server_name on;
#proxy_ssl_name devops.suaempresa.com.br;
# Habilitar somente após configurar a CA confiável:
# proxy_ssl_trusted_certificate /etc/nginx/certs/cnt-ca-chain.pem;
# proxy_ssl_verify on;
}
}
Depois de criar o arquivo, podemos valide e reinicie o Nginx.
Configurando o cliente
Será necessário executar algumas configurações no cliente.
Para funcionar corretamente os comandos git, execute:
git config --global http.emptyAuth true
git fetch
Para funcionar corretamente no navegador, crie as seguintes chaves de registro:
- Na chave HKEY_CURRENT_USER\Software\Policies\Google\Chrome o valor DWORD DisableAuthNegotiateCnameLookup com dado 1
- Na chave HKEY_CURRENT_USER\Software\Policies\Microsoft\Edge o valor DWORD DisableAuthNegotiateCnameLookup com dado 1
- Na chave HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMapKey o VALOR https://devops.suaempresa.com.br com dado 1
Se preferir em vez de HKEY_CURRENT_USER crie em HKEY_LOCAL_MACHINE, depois reinicie o computador e tente acesso.
Conclusão
Com essa arquitetura, é possível colocar o Azure DevOps Server com um proxy reverso, centralizar o acesso, administrar certificados HTTPS, aplicar políticas de segurança e manter os servidores de aplicação isolados da exposição direta à internet.
Com planejamento, testes e uma configuração adequada ao ambiente, o Nginx pode fazer parte de uma arquitetura organizada e segura para disponibilizar o Azure DevOps Server aos usuários da empresa.
Fontes/Referências
NVLAN – Por que utilizar um proxy reverso
https://stackoverflow.com/questions/67178214/azuredevops-onpremise-behind-reverse-proxy
Mais Informações
Esperamos ter te ajudado e estaremos sempre a disposição para mais informações.
Se você tem interesse em algum assunto específico, tem alguma dúvida, precisa de ajuda, ou quer sugerir um post, entre em contato conosco pelo e-mail equipe@nvlan.com.br.
