我正在尝试在AWS上的MEAN堆栈中使用Express作为我的服务器。但是我试图设置子域时遇到了问题。我有我的主域名domain.com和id喜欢app.domain.com ..但是我已经尝试了我在网上找到的所有功能都写入server.js文件,没有任何作用。如何在我的app.domain.com子域中轻松完成此操作以使第二个功能而不是加载到端口8000加载?提前致谢!
var express = require('express');
// Main Website
var web = express();
web.get('/', function (req, res){
res.sendFile('/web/index.html', { root: '.' })
});
var port = 9000;
web.listen(port);
console.log('Web Listening on port', port);
//Main Application
var app = express();
app.get('/', function (req, res){
res.sendFile('/app/index.html', { root: '.' })
});
var port = 8000;
app.listen(port);
console.log('Web Listening on port', port);
更新
我尝试在这里使用Vhost,但它为主域和子域加载相同的东西,所以它不起作用。这是我使用的代码:
var express = require('express');
var connect = require('connect');
var http = require('http');
var vhost = require('vhost');
// Main Website
var web = express();
web.get('/', function (req, res){
res.sendFile('/web/index.html', { root: '.' })
});
var port = 9000;
web.listen(port);
console.log('Web Listening on port', port);
//Main Application
var app = connect()
app.use(vhost('app.domain.com', function (req, res) {
res.sendFile('/app/index.html', { root: '.' })
httpServer.emit('request', req, res)
}))
app.listen(8000)
我真的不需要将它们放在我原本尝试过的单独端口上。但无论哪种方式都不起作用..
答案 0 :(得分:1)
由于您使用的是AWS,因此您可以使用Application Load Balancer来实现目标。
设置ALB,并将两个域指向ALB CNAME。
然后,您需要创建2个目标组,一个用于app.domain.com
,另一个用于domain.com
。
目标群体:应用
protocol: HTTP
port: 8000
目标群体:网络
protocol: HTTP
port: 9000
将您的EC2实例附加到两个目标组
Target group > Targets > Edit > Add to registered
最后,您必须向ALB添加HTTP侦听器,并设置规则以将每个域转发到其目标组。
设置规则后,当您输入app.domain.com
时,ALB会将请求转发到您在端口8000上侦听的快速应用程序,并且在浏览domain.com
时将使用侦听端口9000的请求
答案 1 :(得分:0)
如果您使用的是Route53,我建议您使用记录集通过IP地址将域和子域重定向到同一个ec2实例,然后您可以使用ngix,就像这篇文章中的评论enter link description here
使用负载均衡器(ALB)生成的最低成本为21.96美元,但使用Route53时,最低成本为1美元或更低。
如果您不想使用像nginx这样的代理,您可以拥有低成本的s3网站托管,6GB左右的路由,以及每月最少1USD的路由53路由,如果您有REST API服务,可以从前端拨打电话您的实例取决于访问的网站没有问题。
此致
答案 2 :(得分:0)
在一个端口上服务的node.js之外不需要任何东西。这只是基于http标头的路由问题。
var express = require('express');
var http = require('http');
var vhost = require('vhost');
// Main Website
var webapp = express();
webapp.get('/', function (req, res){
res.sendFile('/web/index.html', { root: '.' });
});
//Main Application
var mainapp = express();
mainapp.use(function (req, res) {
res.sendFile('/app/index.html', { root: '.' });
}));
//Virtual Routing Application
var virtualapp = express();
app.use(vhost('app.domain.com', webapp));
app.use(vhost('domain.com', mainapp));
app.use(vhost('www.domain.com', mainapp));
app.listen(9000);