繁体   English   中英

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

[英]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#8381nodejs/node#15620 )。 请求库支持是混合的:

任何提供传递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_PRELOADDYLD_INSERT_LIBRARIES ,您可以使用通用代理,例如ProxyChains-NG (或原始ProxyChains )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM