web-dev-qa-db-ja.com

Node.jsグローバルプロキシ設定

私はプロキシサーバーの背後にあるクロップネットワークで働いていました。私のコードでは、このスレッドで説明されているアプローチを使用してプロキシを設定できます( node.js http.Clientでhttpプロキシを使用するにはどうすればよいですか? )。

しかし、問題は、ほとんどのサードパーティモジュールにはプロキシ設定がないため、コードを変更してプロキシを追加できないことです。また、私のコードは直接接続環境で使用される可能性があるため、コードでプロキシ設定をハードコーディングすることはできません。

NPMにはプロキシのグローバル設定があります。

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

しかし、Node.jsで同様の設定は見つかりませんでした。

Node.jsはグローバルプロキシ設定をサポートしているため、すべてのコードを変更したり、簡単にオン/オフを切り替える必要はありません。

32
Shaun Xu

残念ながら、http.requestの呼び出しごとにプロキシ情報を設定する必要があるようです。 Nodeには、グローバルプロキシ設定のメカニズムは含まれていません。

ただし、NPMの global-tunnel-ng module はこれを処理しているように見えます。

var globalTunnel = require('global-tunnel-ng');

globalTunnel.initialize({
  Host: '10.0.0.10',
  port: 8080,
  proxyAuth: 'userId:password', // optional authentication
  sockets: 50 // optional pool size for each http and https
});

initializeへの呼び出しでグローバル設定が確立された後、http.requestrequest library の両方がプロキシ情報を使用します。

モジュールはhttp_proxy環境変数も使用できます。

process.env.http_proxy = 'http://proxy.example.com:3129';
globalTunnel.initialize();
22
apsillers

最後に、この質問を(部分的に)解決するモジュールを作成しました。基本的に、このモジュールはhttp.request関数、プロキシ設定を追加して起動します。私のブログ投稿を確認してください: https://web.archive.org/web/20160110023732/http://blog.shaunxu.me:80/archive/2013/09/05/semi-global-proxy-setting -for-node.js.aspx

4
Shaun Xu

Nodejs設定ではありませんが、proxychainsを使用することをお勧めします。パッケージマネージャーでおそらく利用可能です。

構成ファイル(/etc/proxychains.conf)でプロキシを設定した後、proxychains npm startまたはproxychains4 npm start(つまりproxychains [command_to_proxy_transparently])を実行すると、すべてのリクエストが自動的にプロキシされます。

私のための構成設定:

これらは、追加する必要がある最小限の設定です

## Exclude all localhost connections (dbs and stuff)
localnet 0.0.0.0/0.0.0.0
## Set the proxy type, ip and port here
http    10.4.20.103 8080

nslookup [proxyurl]を使用してプロキシのIPを取得できます)

1
Megh Parikh

{userid}および{password}を組織のIDとパスワードに置き換えるか、マシンにログインします。

npm config set proxy http://{userid}:{password}@proxyip:8080/
npm config set https-proxy http://{userid}:{password}@proxyip:8080/
npm config set http-proxy http://{userid}:{password}@proxyip:8080/
strict-ssl=false
0
vijay