簡體   English   中英

一個域的代理子域,另一個域的子域

[英]Proxy subdomain of one domain the subdomain of another domain

我想像一個瀏覽器同步一樣設置一個基本代理,例如,我要轉到web1.domain1.xyz,它應該代理到web1.domain.xyz(因此,它是對any.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

我看到他們使用自定義函數來替換鏈接,但是我沒有成功實現它們的邏輯。

我不確定如何使用http-proxy來完成您要的操作,但是我幾乎可以肯定可以使用express-vhost來完成。 自述文件中甚至還有一個合適的示例。 我一直發現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)

編輯:我以為你有一個可行的例子。 無法正確理解問題:-/進一步閱讀:

您可以鏈接替換調用

// 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);

如果要代理到其他服務器,則可以制作字典並將其替換為該值

//Proxy domain1 => domain2, and domain3 => domain4
var domains = {'domain1.xyz':'domain2.xyz','domain3.xyz':'domain4.xyz'}
[...]

for (var i in domains) {
    domain = domain.replace('/'+i+'/gi',domains[i]);
}

編輯:替換鏈接您實際上必須替換鏈接。 Browser-sync使用Regex從內容中解析出鏈接,並用簡單的string.replace替換鏈接。 這里要查看的功能是( https://github.com/BrowserSync/browser-sync/search?utf8=%E2%9C%93&q=rewriteLinks

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM