一个域的代理子域是另一个域的子域

时间:2016-05-11 12:07:56

标签: node.js http node-http-proxy

我想设置一个基本的代理,例如一个浏览器同步,例如我想转到web1.domain1.xyz,它应该代理到web1.domain.xyz(所以它是any.domain1 .xyz to anything.domain.xyz)

我已经完成了这部分工作:

// HTTP Proxy 
var simpleHttp       = require("http");
var simpleHttpProxy  = require("http-proxy");
var simpleProxy      = simpleHttpProxy.createServer();

simpleHttp.createServer(function(req,res){
    var target = 'http://'+req.headers.host.replace(/domain1.xyz|domain2.xyz|domain3.xyz/gi,'domain.xyz');
    simpleProxy.web(req, res, {
        rewriteRules: true,
        xfwd: true,
        toProxy: true,
        changeOrigin: true,
        hostRewrite: true,
        autoRewrite: true,
        protocolRewrite: true,
        target: target
    });
}).listen(4000);

我还希望能够指出多个域名,例如domain1.com domain2.com domain3.com。

然而,它并没有取代链接,我不知道浏览器同步如何做到这一点,我一直在研究https://github.com/BrowserSync/browser-sync/blob/master/lib/server/proxy-server.jshttps://github.com/BrowserSync/browser-sync/blob/master/lib/server/proxy-utils.js

我看到他们使用自定义函数来替换链接,但是我没有成功实现他们的逻辑。

2 个答案:

答案 0 :(得分:0)

我不确定如何使用http-proxy执行您要求的操作,但我几乎可以肯定可以使用express-vhost完成此操作。 README中甚至还有一个合适的例子。我总是发现express-vhost非常轻巧和实用。

    var connect = require('connect')
    var serveStatic = require('serve-static')
    var vhost = require('vhost')

    var mailapp = connect()

    // add middlewares to mailapp for mail.example.com

    // create app to serve static files on subdomain
    var staticapp = connect()
    staticapp.use(serveStatic('public'))

    // create main app
    var app = connect()

    // add vhost routing to main app for mail
    app.use(vhost('mail.example.com', mailapp))

    // route static assets for "assets-*" subdomain to get
    // around max host connections limit on browsers
    app.use(vhost('assets-*.example.com', staticapp))

    // add middlewares and main usage to app

    app.listen(3000)

答案 1 :(得分:0)

编辑:我认为你有一个有效的例子。没有正确理解这个问题: - /进一步阅读:

您可以链接替换电话

{{> molecules-card(title: 'Title', content: '<div>Long and nasty string of html</div>' ) }}

如果您想代理不同的服务器,您可以创建字典并替换为该值

// HTTP Proxy 
var simpleHttp       = require("http");
var simpleHttpProxy  = require("http-proxy");
var simpleProxy      = simpleHttpProxy.createServer();

var domains          = ['domain1.xyz','domain2.xyz','domain3.xyz'];

simpleHttp.createServer(function(req,res){

    // Calling replace for every entry in domains       
    var domain = req.headers.host;
    for (var i in domains) {
        domain = domain.replace('/'+domains[i]+'/gi','domain.xyz');
    }
    var target = 'http://'+domain;

    simpleProxy.web(req, res, {
        rewriteRules: true,
        xfwd: true,
        toProxy: true,
        changeOrigin: true,
        hostRewrite: true,
        autoRewrite: true,
        protocolRewrite: true,
        target: target
    });
}).listen(4000);

编辑: 替换您真正需要的链接替换链接。浏览器同步使用Regex解析内容中的链接,并用简单的string.replace替换链接。这里看的功能是(https://github.com/BrowserSync/browser-sync/search?utf8=%E2%9C%93&q=rewriteLinks