[英]Make Node.js use http_proxy, https_proxy and no_proxy environment variables
我有一个节点服务器,并且基于最近的一些基础设施更改,我需要确保所有出站请求都通过 Squid 代理,除了到 NO_PROXY 环境变量中列出的主机的流量。
设置 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY 似乎不会影响节点服务器的行为,但我需要一种方法来做到这一点,而无需手动编辑库。 我有大约 10 个库可以访问需要尊重这种代理行为的外部服务。
有没有其他方法可以全局设置代理行为,包括尊重 NO_PROXY?
以防万一有人到达这里,它似乎已经添加到https://github.com/request/request/pull/1096 中的request.js
不幸的是,Node.js 运行时不支持使用开箱即用的环境变量配置 HTTP 代理(请参阅nodejs/node#8381和nodejs/node#15620 )。 请求库支持是混合的:
request
(请求/请求#1096 )node-fetch
没有( node-fetch/node-fetch#195 )(见下文)got
没有( sindresorhus/got#79 )(见下文) 任何提供传递http.Agent
的方法的库,它可以支持环境配置的代理,例如:
例如:
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
,或者根本无法修改代码,您可能需要考虑global-agent
,它可以用作预加载的模块来代理所有请求(由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-NG (或原始ProxyChains )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.