web-dev-qa-db-ja.com

プロキシの背後にあるnpmがステータス403で失敗する

プロキシの背後でnpmを実行しようとしています。私は両方ともプロキシを直接入力するか、Authoxyを介して入力しようとしました:

npm config set proxy http://localhost:8999
npm config set https-proxy http://localhost:8999

使用するプロキシに関係なく、npm searchを実行すると常に同じエラーが発生します。

npm info it worked if it ends with ok
npm verb cli [ 'node', '/usr/local/bin/npm', 'search' ]
npm info using [email protected]
npm info using [email protected]
npm verb config file /Users/xxx/.npmrc
npm verb config file /usr/local/etc/npmrc
npm verb config file /usr/local/lib/node_modules/npm/npmrc
npm WARN Building the local index for the first time, please be patient
npm verb url raw /-/all
npm verb url resolving [ 'https://registry.npmjs.org/', './-/all' ]
npm verb url resolved https://registry.npmjs.org/-/all
npm info retry registry request attempt 1 at 09:48:47
npm http GET https://registry.npmjs.org/-/all
npm info retry will retry, error on last attempt: Error: tunneling socket could not be established, sutatusCode=403
npm info retry registry request attempt 2 at 09:48:57
npm http GET https://registry.npmjs.org/-/all
npm info retry will retry, error on last attempt: Error: tunneling socket could not be established, sutatusCode=403
npm info retry registry request attempt 3 at 09:49:57
npm http GET https://registry.npmjs.org/-/all
npm ERR! Error: tunneling socket could not be established, sutatusCode=403
npm ERR!     at ClientRequest.onConnect (/usr/local/lib/node_modules/npm/node_modules/request/tunnel.js:148:19)
npm ERR!     at ClientRequest.g (events.js:185:14)
npm ERR!     at ClientRequest.EventEmitter.emit (events.js:115:20)
npm ERR!     at Socket.socketOnData (http.js:1383:11)
npm ERR!     at TCP.onread (net.js:410:27)

コマンドは常にsutatusCode [sic!]403で失敗します-これは無許可を意味します。ユーザー名/パスワードを要求しないようにAuthoxyを設定しました。 Authoxyをバイパスし、NTLMプロキシの実際のプロキシ資格情報をhttp:// user:pass @ proxy:portの形式で提供すると、同じエラーが発生します。

プロキシを介してこれを機能させるにはどうすればよいですか?

更新

これを報告するためにNPMプロジェクトに問題を作成しました: https://github.com/isaacs/npm/issues/2866

56
nwinkler

はい、質問を投稿してから数分以内に、私はここで答えを見つけました: https://github.com/npm/npm/issues/2119#issuecomment-5321857

問題は、プロキシ経由のHTTPSではnpmがそれほど優れていないように思われます。レジストリURLをHTTPSからHTTPに変更すると、修正されました。

npm config set registry http://registry.npmjs.org/

プロキシ構成を提供する必要があります(私の場合はAuthoxyを介して)が、すべて正常に動作するようになりました。

一般的な問題のようですが、十分に文書化されていません。ここでのこの回答が、この問題に遭遇した場合に人々が見つけやすくなることを願っています。

115
nwinkler
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080

クレジットは http://jjasonclark.com/how-to-setup-node-behind-web-proxy に移動します。

28
tedyyu

プロキシで認証するためにユーザー名とパスワードを提供する必要がある場合、これは使用する構文です。

npm config set proxy http://usr:pwd@Host:port
npm config set https-proxy http://usr:pwd@Host:port
12
Olivier C

他の誰かがプロキシ設定を壊してしまう場合は、。npmrcに移動して設定を入力してください。 このファイルは、ノードのルートフォルダーレベルにあります。

修正したファイルは次のようになります。

#proxy = http://proxy.company.com:8080
https-proxy = https://proxy.company.com:8080 
registry = http://registry.npmjs.org/
5
atlMapper

Jenkinsまたは他のCIサーバーを使用している場合:重要ですwhere特にローカル開発環境とCI環境でプロキシが異なる場合は、プロキシを定義します。この場合:

  • プロジェクトの.npmrcファイルでプロキシを定義しないでください。または、行う場合は、CIサーバーの設定を必ずオーバーライドしてください。
  • その他のプロキシ設定により、403 Forbidden間違ったプロキシを使用しているという事実へのヒントはほとんどありません。 gradle.propertiesなど。必要に応じて修正/オーバーライドします。

TLDR:プロジェクトではなく、作業中のマシンでプロキシを定義します。

1
Marc.S