【发布时间】:2013-04-29 16:13:41
【问题描述】:
我正在尝试设置一个仅转发请求的 node-http-proxy。 最后,这个代理应该在我通过浏览器访问的每个网站中注入 javascript..
目前,大多数页面都已正确转发和显示,但有些页面(例如 posterkoenig.ch 或 verkehrsclub.ch)返回空白页面或页面上有错误。如果没有代理,这两个站点都可以正常工作。我需要改变什么,或者我错过了什么没有正确转发?
我对 nodejs 很陌生,甚至不完全确定我的方法是否可行。
这是我目前得到的:
var httpProxy = require('http-proxy');
var url = require('url');
httpProxy.createServer(function(req, res, proxy) {
var urlObj = url.parse(req.url);
proxy.proxyRequest(req, res, {
host: urlObj.host,
port: 80,
changeOrigin: true,
enable : { xforward: true }
});
}).listen(9000, function () {
console.log("Waiting for requests...");
});
更新
按照@robertklep 的建议,我删除了changeOrigin 并重新定义了req.headers.host 和req.headers.url
posterkoenig.ch:
现在抛出:
An error has occurred:
{"code":"ENOTFOUND","errno":"ENOTFOUND","syscall":"getaddrinfo"}
verkehrsclub.ch:
首页现在可以正常工作,但子页面仍然会在页面上抛出错误。
var httpProxy = require('http-proxy');
var url = require('url');
httpProxy.createServer(function(req, res, proxy) {
var urlObj = url.parse(req.url);
req.headers['host'] = urlObj.host;
req.headers['url'] = urlObj.href;
proxy.proxyRequest(req, res, {
host: urlObj.host,
port: 80,
enable : { xforward: true }
});
}).listen(9000, function () {
console.log("Waiting for requests...");
});
【问题讨论】:
-
您能否为 HTTPS 网站执行此操作?
-
基本上应该是可以的..我没试过,但是documentation of node-http-proxy说它支持https。但是您的节点应用程序也必须运行 https 服务器,因此您需要有效的 https 证书和密钥才能使其工作。然后,您应该能够将上述脚本的slight variation 与 https 服务器一起使用。希望有帮助!
-
您如何配置浏览器以使用此代理?刚刚输入 localhost:9000 作为 Web 代理服务器地址?
标签: javascript node.js http-proxy node-http-proxy