我最近创建了一个 node.js 应用程序,它可以访问社交媒体网站并缓存我们的公共提要。我正在使用一些现有的 npm 模块来方便访问社交媒体 api。它在我的开发环境中就像一个魅力,但在我们的生产环境中,请求超时,因为它们需要通过代理。
无需修改 npm 模块,如何使出站请求通过代理?
使用 http.globalAgent 属性。这将让您拦截在您的进程中运行的所有请求。然后,您可以将这些请求修改为适合代理服务器的格式。
http://nodejs.org/api/http.html#http_http_globalagent
另一种选择是为该应用程序创建代理例外。
有一个 npm 模块:
https://www.npmjs.com/package/global-tunnel
var globalTunnel = require('global-tunnel');
globalTunnel.initialize({
host: '10.0.0.10',
port: 8080,
sockets: 50 // optional pool size for each http and https
});
或者如果你只想代理某些请求,你可以使用隧道包(这是上面全局隧道背后的驱动力):
https://www.npmjs.com/package/tunnel
var tunnel = require('tunnel');
// create the agent
var tunnelingAgent = tunnel.httpsOverHttps({
proxy: {
host: 'localhost',
port: 3128
}
});
var req = https.request({
host: 'example.com',
port: 443,
// pass the agent in your request options
agent: tunnelingAgent
});