Javascript 检查在新端口上运行的应用程序
我需要创建一个应用程序来获取特定端口的请求,并将其代理到不同端口上的新服务器 例如,以下端口3000将作为端口9000的代理 实际上,您在9000(引擎盖下)上运行应用程序,因为客户机中的用户单击3000 我试着做些类似的事情Javascript 检查在新端口上运行的应用程序,javascript,node.js,express,node-http-proxy,node-request,Javascript,Node.js,Express,Node Http Proxy,Node Request,我需要创建一个应用程序来获取特定端口的请求,并将其代理到不同端口上的新服务器 例如,以下端口3000将作为端口9000的代理 实际上,您在9000(引擎盖下)上运行应用程序,因为客户机中的用户单击3000 我试着做些类似的事情 var proxy = httpProxy.createProxyServer({}); http.createServer(function (req, res) { var hostname = req.
var proxy = httpProxy.createProxyServer({});
http.createServer(function (req, res) {
var hostname = req.headers.host.split(":")[0];
var pathname = url.parse(req.url).pathname;
proxy.web(req, res, {
target: 'http://' + hostname + ':' + 9000
});
var proxyServer = http.createServer(function (req, res) {
res.end("Request received on " + 9000);
});
proxyServer.listen(9000);
}).listen(3000, function () {
});
var http = require("http");
var httpProxy = require('http-proxy');
/** PROXY SERVER **/
var proxy = httpProxy.createServer({
target:'http://localhost:'+3000,
changeOrigin: true
})
// add custom header by the proxy server
proxy.on('proxyReq', function(proxyReq, req, res, options) {
proxyReq.setHeader('X-Special-Proxy-Header', 'foobar');
});
proxy.listen(8080);
/** TARGET HTTP SERVER **/
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
//check if the request came from proxy server
if(req.headers['x-special-proxy-header'])
console.log('Request received from proxy server.')
res.write('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2));
res.end();
}).listen(3000);
要测试代理服务器是否工作或请求是否来自代理服务器,请执行以下操作:
我添加了一个proxyReq
侦听器,它添加了一个自定义头。您可以从该标头判断请求是否来自代理服务器
因此,如果您访问http://localhost:8080/a/b/c
您将看到req.headers
的标题如下:
'X-Special-Proxy-Header': 'foobar'
仅当客户端向8080端口发出请求时,才设置此标头
但是对于
http://localhost:3000/a/b/c
,您将看不到这样的标头,因为客户端正在绕过代理服务器,并且该标头从未设置。谢谢!但是我该怎么测试呢?你能解释一下吗?谢谢Hassasin!投票通过了!最后一个问题是,现在我有了手动切换到新代理端口所需的新服务器,我应该如何将调用导航到新端口?在上面的示例中,只需将8080替换为3000,将3000替换为90000谢谢,但当我单击localhost:3000时,我在json“host”:“localhost:3000”中获得了3000,我不需要获得9000?我明白了。您可以设置proxyReq.setHeader('host','localhost:9000')
——但可能有更好的方法。我会调查的。