使用Express的简单子域

时间:2018-04-26 02:30:30

标签: node.js amazon-web-services express mean

我正在尝试在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)

我真的不需要将它们放在我原本尝试过的单独端口上。但无论哪种方式都不起作用..

3 个答案:

答案 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侦听器,并设置规则以将每个域转发到其目标组。

enter image description here

enter image description here

设置规则后,当您输入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);