最近我在DigitalOcean上設置了一個VPS,以在同一域名下運行幾個不同的Node.js腳本。

現在,您無法使兩個不同的Node.js應用程序監聽同一個端口,因此必須使用反向代理。常用的方法是使用Nginx。

我將每個Node應用程序設置為在自己的子文件夾中運行,所以我需要編輯Nginx配置:

sudo nano /etc/nginx/sites-available/default

配置文件原始內容如下:

server {
 listen 80 default\_server;
 listen [::]:80 default\_server;
 root /var/www/html;
 index index.html index.htm index.nginx-debian.html;
 server\_name hellonode;

 location ^~ /assets/ {
 gzip\_static on;
 expires 12h;
 add\_header Cache-Control public;
 }

 location / {
 proxy\_http\_version 1.1;
 proxy\_cache\_bypass $http\_upgrade;

 proxy\_set\_header Upgrade $http\_upgrade;
 proxy\_set\_header Connection 'upgrade';
 proxy\_set\_header Host $host;
 proxy\_set\_header X-Real-IP $remote\_addr;
 proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
 proxy\_set\_header X-Forwarded-Proto $scheme;

 proxy\_pass http://localhost:3000;
 }
}

這個配置允許一個Node.js應用程序在端口3000上運行,並且是主要在/處提供服務的應用程序。

我希望在/myservice下運行一個應用程序,所以我創建了一個在端口3001上監聽的Node應用程序,並添加了以下配置:

location /myservice {
 rewrite ^/myservice/(.\*)$ /$1 break;

 proxy\_http\_version 1.1;
 proxy\_cache\_bypass $http\_upgrade;

 proxy\_set\_header Upgrade $http\_upgrade;
 proxy\_set\_header Connection 'upgrade';
 proxy\_set\_header Host $host;
 proxy\_set\_header X-Real-IP $remote\_addr;
 proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
 proxy\_set\_header X-Forwarded-Proto $scheme;

 proxy\_pass http://localhost:3001;
}

我使用下面的命令檢查配置是否正確:

sudo nginx -t

然後重新啟動nginx:

sudo systemctl restart nginx