我想在一台服务器上创建一个包含多个web应用程序(大约3-5个node.js + express应用程序)的系统。我也只有一个域名。因此,我认为除了主应用程序之外,我还需要为每个应用程序创建子域。
我的问题是-如何将访问某些子域的用户重定向到正确的应用程序?我是否需要使用虚拟机,然后根据其子域将每个用户重定向到不同的虚拟机(ip地址)?我怎么会这么做呢?
或者我可以只使用不同的端口号在同一台服务器上运行每个应用程序吗?或者有没有其他我没有真正考虑过的方法?
哪种方式是最干净的,我该如何实现它?
发布于 2018-08-08 06:27:20
实现此目的的一种非常常见的方法是在不同的端口上运行每个节点服务器,然后设置一个反向代理(如nginx ),使其根据与传入HTTP请求的主机头匹配的方式转发请求。
当然,您可以使用node手动处理此问题,方法是自己检查host标头,并将每个请求转发到关联端口上的适当节点服务器。
下面是一些Node代码,它说明了我所指的内容:
const http = require('http')
const url = require('url')
const port = 5555
const sites = {
exampleSite1: 544,
exampleSite2: 543
}
const proxy = http.createServer( (req, res) => {
const { pathname:path } = url.parse(req.url)
const { method, headers } = req
const hostname = headers.host.split(':')[0].replace('www.', '')
if (!sites.hasOwnProperty(hostname)) throw new Error(`invalid hostname ${hostname}`)
const proxiedRequest = http.request({
hostname,
path,
port: sites[hostname],
method,
headers
})
proxiedRequest.on('response', remoteRes => {
res.writeHead(remoteRes.statusCode, remoteRes.headers)
remoteRes.pipe(res)
})
proxiedRequest.on('error', () => {
res.writeHead(500)
res.end()
})
req.pipe(proxiedRequest)
})
proxy.listen(port, () => {
console.log(`reverse proxy listening on port ${port}`)
})https://stackoverflow.com/questions/51736236
复制相似问题