وكيل عكسي بسيط لـ nginx لخدمة تطبيقات Node.js متعددة من مجلدات فرعية

لقد قمت مؤخرًا بإعداد VPS على DigitalOcean لتشغيل بعض البرامج النصية المختلفة Node.js ضمن نفس المجال.

الآن ، لا يمكن أن يكون لديك تطبيقان مختلفان من Node.js يستمعان على نفس المنفذ ، لذلك عليك استخدام وكيل عكسي. يستخدم Nginx بشكل شائع لذلك.

لقد قمت بإعداد كل تطبيق Node للتشغيل على مجلد فرعي خاص به ، لذلك اضطررت إلى تعديل تكوين 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: