Một proxy ngược nginx đơn giản để cung cấp nhiều ứng dụng Node.js từ các thư mục con

Gần đây tôi đã thiết lập một VPS trên DigitalOcean để chạy một vài tập lệnh Node.js khác nhau trong cùng một miền.

Bây giờ, bạn không thể có hai ứng dụng Node.js khác nhau nghe trên cùng một cổng, vì vậy bạn phải sử dụng proxy ngược. Nginx thường được sử dụng cho điều đó.

Tôi thiết lập từng ứng dụng Node để chạy trên thư mục con của riêng nó, vì vậy tôi phải chỉnh sửa cấu hình Nginx:

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

which was this:

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;
    }

}

This configuration allows one Node.js app, running on port 3000, to be the main app served on /.

I wanted to have an app running under /myservice, so I created a Node app listening on port 3001 and I added this configuration:

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;

}

I checked the configuration was fine using

sudo nginx -t

and I restarted nginx:

sudo systemctl restart nginx  

More network tutorials: