[英]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.js和https://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.