请问在vps上建立多个Nodejs网站后如何为每个网站绑定不同域名? 菜鸟水平 求帮助

请问在vps上建立多个Nodejs网站后如何为每个网站绑定不同域名? 菜鸟水平 求帮助

同上

8 回复

如何在VPS上为多个Node.js网站绑定不同域名

如果您刚刚开始使用Node.js,并且希望在您的VPS(虚拟专用服务器)上托管多个网站,同时为每个网站分配不同的域名,那么本文将为您提供一个简单易懂的指南。我们将通过具体的步骤和代码示例来演示这一过程。

步骤1:准备域名

首先,您需要拥有至少两个域名,并确保这些域名指向您的VPS的IP地址。这通常可以在您的域名注册商的管理面板中完成。

步骤2:安装Node.js和Nginx

在您的VPS上安装Node.js和Nginx。Nginx将作为反向代理,帮助将请求分发到正确的Node.js应用。

# 安装Node.js
sudo apt update
sudo apt install nodejs npm

# 安装Nginx
sudo apt install nginx

步骤3:创建Node.js应用

为每个网站创建一个单独的Node.js应用。例如,假设您有两个网站:example.comtest.com

example.com应用

// example.js
const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello from Example.com!\n');
});

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

test.com应用

// test.js
const http = require('http');

const hostname = '127.0.0.1';
const port = 4000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello from Test.com!\n');
});

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

步骤4:配置Nginx

接下来,配置Nginx以代理到不同的Node.js应用。编辑Nginx配置文件,通常位于 /etc/nginx/sites-available/ 目录下。

example.com配置

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

test.com配置

server {
    listen 80;
    server_name test.com www.test.com;

    location / {
        proxy_pass http://127.0.0.1:4000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

保存配置文件后,测试并重新加载Nginx。

sudo nginx -t
sudo systemctl reload nginx

现在,您应该能够通过各自的域名访问每个Node.js应用了。这样,您就成功地为每个网站绑定了不同的域名!


CentOS 32bit 系统

貌似 node 自己做不了,只能前面弄一层代理了,apache 或者 Nginx

楼上的说得非常正确

根据请求头中的host来判断,nginx也是这么做的,node完全可以做到

反向代理。这类的工具有很多,squid 很有名。

要在VPS上为多个Node.js网站绑定不同的域名,你需要进行以下几个步骤:

  1. 安装和配置Web服务器:通常使用Nginx或Apache作为反向代理,将请求转发到不同的Node.js应用。

  2. 配置DNS:确保你的域名解析指向VPS的IP地址。

  3. 配置Nginx:为每个Node.js应用创建一个Nginx配置文件,指定域名和端口映射。

以下是一个简单的Nginx配置示例,假设你有两个Node.js应用,分别运行在不同的端口上:

Nginx 配置示例

# /etc/nginx/sites-available/firstsite
server {
    listen 80;
    server_name firstsite.com www.firstsite.com;

    location / {
        proxy_pass http://127.0.0.1:3000; # 假设你的第一个Node.js应用运行在3000端口
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

# /etc/nginx/sites-available/secondsite
server {
    listen 80;
    server_name secondsite.com www.secondsite.com;

    location / {
        proxy_pass http://127.0.0.1:4000; # 假设你的第二个Node.js应用运行在4000端口
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

启用配置

将这两个配置文件链接到 sites-enabled 目录,并重新加载Nginx:

sudo ln -s /etc/nginx/sites-available/firstsite /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/secondsite /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

运行Node.js应用

确保你的Node.js应用在指定的端口上运行。例如:

// firstsite.js
const http = require('http');
http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello from First Site\n');
}).listen(3000, () => {
    console.log('First site listening on port 3000');
});

// secondsite.js
const http = require('http');
http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello from Second Site\n');
}).listen(4000, () => {
    console.log('Second site listening on port 4000');
});

启动这些应用:

node firstsite.js
node secondsite.js

这样,当访问 firstsite.comsecondsite.com 时,请求会被Nginx代理到相应的Node.js应用。

回到顶部