Compartilhe que você está se especializando

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.

NVLAN - Consultoria