我有一个节点服务器,并且基于最近的一些基础架构更改,我需要确保所有出站请求都通过Squid代理EXCEPT,以便流向NO_PROXY环境变量中列出的主机。
设置HTTP_PROXY,HTTPS_PROXY和NO_PROXY似乎不会影响节点服务器的行为,但我需要一种方法来执行此操作,而无需手动编辑库。我有~10个图书馆可以联系到需要尊重这种代理行为的外部服务。
还有其他方法可以全局设置代理行为,包括尊重NO_PROXY吗?
答案 0 :(得分:1)
万一有人到达这里,似乎已经将其添加到https://github.com/request/request/pull/1096中的request.js
答案 1 :(得分:0)
遗憾的是,Node.js 运行时不支持使用开箱即用的环境变量配置 HTTP 代理(请参阅 nodejs/node#8381 和 nodejs/node#15620)。请求库支持是混合的:
request
是 (request/request#1096)node-fetch
不 (node-fetch/node-fetch#195)(见下文)got
不 (sindresorhus/got#79)(见下文)任何提供传递 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_PRELOAD
或 DYLD_INSERT_LIBRARIES
,您可以使用通用的代理词,例如 ProxyChains(或原始的 here)。