Portanto, temos um cache de proxy nginx que é usado para manter o tempo de atividade, mesmo se o npm ficar inativo.
Ocasionalmente, esse servidor (notadamente uma vez a cada poucos meses) começa a retornar 400 bad request
para cada resposta de algum pacote específico. Eu percebi que era um cache corrompido ou algo assim. Então limpamos o cache e então podemos npm install
novamente. Tentamos simplesmente reiniciar o servidor, mas isso não é suficiente. Vale a pena mencionar que a fonte real (npm em si) retorna 200OK para o mesmo objeto (ou seja, os arquivos tar.gz).
Aqui está a configuração: link (sinta-se à vontade para explorar os arquivos ao redor).
A configuração é assim:
server {
listen 8888;
server_name localhost;
location / {
proxy_pass https://registry.npmjs.org/;
proxy_cache npm;
proxy_cache_valid 200 302 3d;
proxy_cache_valid 404 1m;
# npm adds "_resolved": 'registry.npmjs.org/xyz.tgz" to package.json files
# this rewrites things correctly
sub_filter 'registry.npmjs.org' 'localhost:8888';
sub_filter_once off;
sub_filter_types application/json;
}
}