407 atrás do proxy VPN da empresa: npm, Maven e VS Code
Um 407 significa que o proxy quer credenciais, não que o registo esteja em baixo. Configure npm, Maven, VS Code e contentores, e exclua os anfitriões internos.
A página interna abrir no navegador prova apenas que o proxy funciona para o navegador, não para o npm ou o Maven. Cada cliente lê a sua própria configuração, e uma rede acessível apenas por VPN acrescenta uma segunda pergunta: se o cliente chega ao proxy. Comece pelo código de estado e siga a cadeia de configuração da ferramenta que falhou. É por isso que um cliente funciona e o vizinho não.
O que um 407 realmente prova
Um 407 Proxy Authentication Required vem do proxy, não do registro nem do repositório. O cliente chegou ao proxy e o proxy recusou o pedido, normalmente porque faltavam credenciais, estavam mal formadas ou não eram aceites para esse destino.
Um tempo limite conta outra história: endereço de proxy errado, nenhuma rota até ao proxy antes de o túnel subir, ou uma entrada de exceção em falta para um host interno. Leia o texto do erro antes de alterar as credenciais.
Confirme o host, a porta, o esquema de autenticação e se o nome de utilizador precisa de prefixo de domínio. Depois verifique se a ferramenta lê o valor de um ficheiro, de uma variável de ambiente ou de ambos. Um nome com domínio é uma causa comum de 407, tal como uma palavra-passe guardada com codificação errada.
O npm lê a sua própria cadeia de configuração
O npm aceita as chaves proxy e https-proxy num .npmrc do utilizador ou do projeto. Indique o esquema, porque os valores são URL, e codifique os caracteres reservados da palavra-passe para que uma arroba não divida o valor.
proxy=http://proxy.example.com:8080
https-proxy=http://proxy.example.com:8080
strict-ssl=true
Com npm config list vê que ficheiro forneceu cada valor efetivo. Uma exportação de shell como npm_config_proxy pode sobrepor-se ao ficheiro, e um .npmrc de projeto com uma palavra-passe pessoal nunca deve ser commitado. Imprima o caminho de origem junto com o valor.
Mantenha strict-ssl ativo. Um proxy que inspeciona TLS pode exigir o CA da empresa no armazém de confiança; desativar a verificação para contornar o erro esconde o problema real de confiança.
O Maven separa proxies de espelhos
O Maven lê proxies e espelhos do ficheiro de definições do utilizador, não do pom do projeto. Coloque os proxies de rede e os espelhos do repositório interno em ~/.m2/settings.xml, e deixe as declarações públicas no projeto.
O bloco de proxy precisa de um id, um sinalizador de ativação, o protocolo, o host e a porta, e uma entrada nonProxyHosts para o repositório interno. Guarde esses campos no ficheiro do utilizador, não no pom, para que uma mudança de rede não reescreva a compilação de toda a equipa.
Adicione o repositório interno a nonProxyHosts para que o Maven se ligue diretamente. Sem essa entrada o proxy torna-se uma paragem desnecessária e a falha parece uma queda do repositório. A entrada de espelho aponta para o repositório interno e não substitui a definição do proxy.
Quem muda de rede pode manter um ficheiro de definições por rede e escolher a cópia certa ao arrancar o shell. Editar um único ficheiro à mão em cada mudança transforma um portátil que funciona num pedido de suporte.
O VS Code e os contentores de desenvolvimento têm espaços de nomes distintos
O VS Code lê http.proxy das definições de utilizador ou do espaço de trabalho, incluindo esquema e porta. Isso cobre os pedidos do editor a extensões e ao marketplace, mas não configura um terminal nem um contentor lançado a partir do editor. Verifique o âmbito da definição e o valor. Uma definição de espaço de trabalho pode sobrepor-se à do utilizador para um projeto.
Um contentor de desenvolvimento tem o seu próprio espaço de nomes de rede. Não herda as variáveis de proxy nem a rota VPN do anfitrião, por isso uma chamada ao marketplace pode falhar dentro do contentor enquanto a mesma chamada funciona no anfitrião.
Dê ao contentor essas variáveis, ou dê-lhe o seu próprio resolvedor e rota. Quando os nomes se resolvem lá dentro mas o proxy nunca responde, a peça em falta é normalmente a rota, não o endereço.
Listas de exceção e precedência do ambiente
Acrescente o gateway VPN, os registos internos e os sufixos DNS privados à lista de exceção. Se o cliente tentar chegar ao gateway através do proxy antes de o túnel existir, a ligação falha de um modo que parece uma queda do proxy. Teste isso com o túnel em baixo.
As variáveis de ambiente e os ficheiros podem discordar. Execute o dump de configuração da ferramenta, não o do shell, e compare os valores. Uma variável duplicada em minúsculas, um valor antigo num shell pai ou um ficheiro de projeto podem sobrepor-se à definição que acabou de alterar.
Em CI passe o proxy como variável secreta e teste a instalação de um pacote na mesma imagem. Um 407 dentro de um contentor significa muitas vezes que a variável simplesmente não está lá, enquanto o shell do anfitrião a tem.
Registe o host e a porta do proxy, os sufixos de exceção e o ficheiro ou variável que os fornece para cada ferramenta. Quando um cliente devolve 407 e outro funciona, esse registo transforma a comparação de quatro configurações numa verificação curta.