تشغيل موقع NodeJS لى خادم Nginx

مواقع NodeJS تكتسب شعبية كبيرة جدا ومن أهم طرق تشغيل هذه المواقع يكون من خلال Nginx. هذا المقال يشرح طريقة تفعيل موقع NodeJS على Nginx.

هذا المقال هو الجزء التاسع من مشروع شرح تثبيت خادم Nginx وتشغيل موقع عليه. للعودة إلى الفهرس، يمكن الضغط هنا.

مواقع NodeJS بدأت تكتسب زخم كبير في الآونة الأخيرة بسبب سهولتها ومرونتها في التعامل وبساطة اللغة التي تستخدمها. على الرغم من وجود عدد هائل من البرمجيات التي تسمح لـNodeJS بالعمل على الإنترنت إلا أن طريقة التشغيل المفضلة هي العمل من خلال وكيل عكسي (بروكسي) مثل Nginx. هذا لا يسمح فقط بعمل عمليات أمان معقدة فحسب، بل يسمح لنا أيضا بضبط أمور لا يمكن عملها في NodeJS مثل الملفات المؤقتة والتصفية حسب بلد الإتصال وغيرها من الأمور.

تشغيل Nginx كوكيل عكسي هو أمر غاية في السهولة ةغاية في المرونة وذلك حسب الامور التي ترغب في عملها. هنا سوف نقوم بشرح عمل وكيل عكسي يوفر لنا القدرة على التعامل مع موقع NodeJS ويوفر لنا القدرة على استخدام مسارات مخصصة من أجل عمليات مختلفة مثل النجاج في إجتياز اختبار Certbot حتى ولو لم يكن مدعوم في NodeJS.

عمل إعدادات موقع NodeJS

كما هو الحال في موقع php، موقع NodeJS أيضا بحاجة لملف إعدادات خاص به. في هذا النوع من المواقع نحاتج لعمل قسم خاص بالوكيل العكسي.

نقوم بالإنتقال إلى مسار ملفات المواقع في Nginx:

cd /etc/nginx/sites-available

ونقوم بعمل ملف جديد من خلال تحرير الملف:

vi nodejs.conf

ومن ثم نقوم بملء الملف بالمحتوى التالي:

server {
listen 80;
server_name nodejs.linuxarabia.co;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
server_name nodejs.linuxarabia.co;

ssl_certificate /etc/letsencrypt/live/arabia.linuxarabia.co/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/arabia.linuxarabia.co/privkey.pem;
ssl_protocols TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;

access_log /home/nodejs/logs/access.log;
error_log /home/nodejs/logs/error.log warn;

location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /usr/share/nginx/html;
}

ignore_invalid_headers off;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

location / {
proxy_pass http://localhost:2368;
}
}

هنا نقوم بتعديل server_name و وضع النطاق الملائم، وتعديل proxy_pass إلى المنفذ الملائم الذي يستخدمه NodeJS ومن ثم تفعيل الموقع من خلال الاوامر التالية:

cd /etc/nginx/sites-enabled/
ln -s ../sites-available/nodejs.conf nodejs.conf
systemctl restart nginx

لاحظ أن شهادة ssl غير صحيحة وهي خاصة بالخادم. هذا الأمر مؤقت إلى أن نتمكن من إصدار شهادة خاصة بالموقع نفسه.

عند إكتمال إعادة التشغيل، نقوم بمحاولة إصدار شهادة ssl من خلال الأمر التالي:

certbot certonly --webroot -d nodejs.linuxarabia.co --dry-run

وعند نجاح العملية، نقوم بتنفيذ الأمر الصحيح:

certbot certonly --webroot -d nodejs.linuxarabia.co

وعند إكتمال العملية، نقوم بتعديل ملف إعدادات الموقع في Nginx وتغيير روابط شهادة ssl ومفتاح الشهادة. عند الإنتهاء، نقوم بإعادة تشغيل Nginx.

يمكننا الآن محاولة تصفح الموقع والتأكد من أنه يعمل بشكل صحيح. النتيجة المتوقعه هي عمل الموقع بشكل صحيح: