Nodejs 多域名绑定不同端口问题

Nodejs 多域名绑定不同端口问题

对运维这方面不是很懂哦 我手上有三个域名 一个独立IP的VPS 怎么样能实现 访问不同的域名 对应到 监听的不同端口哦 绑HOST 貌似不能带端口 比如 127.0.0.1:81 www.xx.com

5 回复

Node.js 多域名绑定不同端口问题

如果你有一个独立IP的VPS,并且希望访问不同的域名时能够监听不同的端口,可以通过Node.js来实现。下面是一个简单的示例,展示如何为每个域名配置不同的端口。

示例代码

首先,我们需要安装http模块(Node.js自带)和https模块(如果需要的话)。然后创建一个基本的HTTP服务器,并根据请求的主机名(即域名)来选择不同的端口。

const http = require('http');

// 定义不同域名对应的端口
const domains = {
    'www.domain1.com': 3000,
    'www.domain2.com': 3001,
    'www.domain3.com': 3002
};

// 创建HTTP服务器
function createServer(domain, port) {
    const server = http.createServer((req, res) => {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end(`Hello from ${domain} on port ${port}`);
    });

    server.listen(port, () => {
        console.log(`Server running at http://${domain}:${port}/`);
    });
}

// 启动多个服务器
for (const [domain, port] of Object.entries(domains)) {
    createServer(domain, port);
}

解释

  1. 定义域名和端口映射

    • domains对象将每个域名映射到一个特定的端口。
  2. 创建服务器函数

    • createServer函数接受一个域名和端口号作为参数,并创建一个HTTP服务器。
    • 当接收到请求时,它会返回一条简单的消息,表明请求来自哪个域名和端口。
  3. 启动多个服务器

    • 使用Object.entries遍历domains对象中的所有键值对。
    • 对于每个域名-端口组合,调用createServer函数创建并启动服务器。

配置DNS

确保你的域名(例如 www.domain1.comwww.domain2.comwww.domain3.com)指向你的VPS的公共IP地址。这通常在你的域名注册商的管理界面中完成。

运行代码

将上述代码保存为一个文件(例如server.js),然后运行:

node server.js

这样,当你访问不同的域名时,它们将会被路由到相应的端口上的服务器。

通过这种方式,你可以轻松地为不同的域名配置不同的端口,从而实现更灵活的服务部署。


有的运营商让你把多个域名map到一个程序上。

不带端口默认的是80端口,所以不同域名默认不同端口是不可能的

只有通过反向代理来实现此功能

nginx反向代理, 或者node的node-http-proxy

要实现多个域名绑定到同一个独立IP的VPS但监听不同端口的需求,可以使用Node.js创建多个HTTP服务器实例,每个实例监听不同的端口,并通过域名来区分请求。

示例代码

首先,你需要安装node-http-proxy模块,它可以帮助你将不同域名的请求转发到不同的端口:

npm install http http-proxy

然后,你可以创建一个Node.js应用,使用httphttp-proxy模块来实现多域名绑定不同端口的功能。以下是一个简单的例子:

const http = require('http');
const httpProxy = require('http-proxy');

// 创建代理服务器
const proxy = httpProxy.createProxyServer({});

// 创建服务器
const server = http.createServer((req, res) => {
    // 解析请求的主机名
    const hostname = req.headers.host.split(':')[0];

    if (hostname === 'www.domain1.com') {
        // 将请求转发到监听8081端口的服务器
        proxy.web(req, res, { target: 'http://localhost:8081' });
    } else if (hostname === 'www.domain2.com') {
        // 将请求转发到监听8082端口的服务器
        proxy.web(req, res, { target: 'http://localhost:8082' });
    } else {
        res.writeHead(404);
        res.end('Domain not found');
    }
});

server.listen(80);

console.log('Server listening on port 80');

// 创建监听8081端口的服务器
http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('This is domain1.com on port 8081');
}).listen(8081);

// 创建监听8082端口的服务器
http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('This is domain2.com on port 8082');
}).listen(8082);

解释

  • 在上面的代码中,我们创建了一个主服务器监听80端口,负责处理所有传入的HTTP请求。
  • 使用req.headers.host获取请求的主机名。
  • 根据不同的域名(www.domain1.comwww.domain2.com),我们将请求转发到监听不同端口(8081和8082)的服务器上。
  • 如果请求的域名不在配置中,则返回404错误。

这样,你可以通过配置不同的域名指向不同的端口来实现多域名绑定不同端口的需求。

回到顶部