使Node.js使用http_proxy,https_proxy和no_proxy环境变量

时间:2016-06-07 20:15:58

标签: node.js http proxy

我有一个节点服务器,并且基于最近的一些基础架构更改,我需要确保所有出站请求都通过Squid代理EXCEPT,以便流向NO_PROXY环境变量中列出的主机。

设置HTTP_PROXY,HTTPS_PROXY和NO_PROXY似乎不会影响节点服务器的行为,但我需要一种方法来执行此操作,而无需手动编辑库。我有~10个图书馆可以联系到需要尊重这种代理行为的外部服务。

还有其他方法可以全局设置代理行为,包括尊重NO_PROXY吗?

2 个答案:

答案 0 :(得分:1)

万一有人到达这里,似乎已经将其添加到https://github.com/request/request/pull/1096中的request.js

答案 1 :(得分:0)

遗憾的是,Node.js 运行时不支持使用开箱即用的环境变量配置 HTTP 代理(请参阅 nodejs/node#8381nodejs/node#15620)。请求库支持是混合的:

任何提供传递 http.Agent 的方式的库,该 tunnel 可以支持环境配置代理,例如:

例如:

import fetch from 'node-fetch';
import ProxyAgent from 'proxy-agent';

const response = await fetch('https://example.com', { agent: new ProxyAgent() });
const body = await response.text();

如果你不能传递Agent,或者根本不能修改代码,你可能需要考虑ProxyChains-NG,它可以作为一个预加载的模块来代理所有请求(由 GLOBAL_AGENT_HTTP_PROXY 环境变量配置):

export GLOBAL_AGENT_HTTP_PROXY=http://proxy.example.com
node --require global-agent/bootstrap mycode.js

或者,如果您的系统支持 LD_PRELOADDYLD_INSERT_LIBRARIES,您可以使用通用的代理词,例如 ProxyChains(或原始的 here)。

相关问题