首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >1台node.js服务器上有多个子域

1台node.js服务器上有多个子域
EN

Stack Overflow用户
提问于 2018-08-08 06:22:29
回答 1查看 1.2K关注 0票数 1

我想在一台服务器上创建一个包含多个web应用程序(大约3-5个node.js + express应用程序)的系统。我也只有一个域名。因此,我认为除了主应用程序之外,我还需要为每个应用程序创建子域。

我的问题是-如何将访问某些子域的用户重定向到正确的应用程序?我是否需要使用虚拟机,然后根据其子域将每个用户重定向到不同的虚拟机(ip地址)?我怎么会这么做呢?

或者我可以只使用不同的端口号在同一台服务器上运行每个应用程序吗?或者有没有其他我没有真正考虑过的方法?

哪种方式是最干净的,我该如何实现它?

EN

回答 1

Stack Overflow用户

发布于 2018-08-08 06:27:20

实现此目的的一种非常常见的方法是在不同的端口上运行每个节点服务器,然后设置一个反向代理(如nginx ),使其根据与传入HTTP请求的主机头匹配的方式转发请求。

当然,您可以使用node手动处理此问题,方法是自己检查host标头,并将每个请求转发到关联端口上的适当节点服务器。

下面是一些Node代码,它说明了我所指的内容:

代码语言:javascript
复制
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}`)
})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51736236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档