社内ネットワーで開発していると、プロキシ越しの通信に悩まされることがあります。
今回はSquidでプロキシを経由してnpm installを試みたところ、エラーが発生。
いくつか試行錯誤した結果、ようやく解決できたので、その記録です。
発生したエラー
-
環境
Ubuntu 22.04:LANのみ 外部接続しない
Windows11:Squid for windows v4.14 -
以下のようにプロキシ設定済み
export http_proxy=http://192.168.11.123:3128
export https_proxy=http://192.168.11.123:3128
- Node.jsとnpmをインストール後、グローバルにnを入れようとしたところでエラー
sudo apt install nodejs npm
sudo npm install n -g
- エラー内容
DNS解決に失敗しているようです。
プロキシ越しの名前解決がうまくいっていないみたいです。
npm ERR! code EAI_AGAIN
npm ERR! syscall getaddrinfo
npm ERR! errno EAI_AGAIN
npm ERR! request to https://registry.npmjs.org/n failed, reason: getaddrinfo EAI_AGAIN registry.npmjs.org
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2025-09-09T00_32_16_541Z-debug-0.log
試したこと
curlは通る
- まず確認としてcurlは通る
通信自体はできている
curl -I https://registry.npmjs.org/n
npm configにproxyへ追加
- proxyへ追加
npm install失敗で変わらず
npm config set proxy http://192.168.11.123:3128
npm config set https-proxy http://192.168.11.123:3128
Squid側でIPv4優先の設定
- https://stackoverflow.com/questions/51593730/npm-install-fails-via-squid-proxy-with-unable-to-verify-leaf-signature
- Squidの設定にIPv4優先を入れる
効果なく変わらないエラー。
squid.conf
# IPv4優先
dns_v4_first on
npm installに直接オプションを付ける
- 最終的にnpmのコマンドラインオプションに直接proxy設定を渡したところ、成功しました!
npm install -g n \
--strict-ssl=false \
--registry=https://registry.npmjs.org \
--proxy=http://192.168.11.123:3128 \
--https-proxy=http://192.168.11.123:3128
- バージョン確認もOK
n --version
# ⇒10.2.0
config setではダメで、CLIオプションなら通る
- なぜこうなるのかまだ理解できていません
npmの内部挙動やキャッシュ、環境変数との優先順位などが関係しているとは思います。
とはいえ、CLIオプションで回避できることが分かったので良かったです。