اذهب إلى المحتوى

السؤال

نشر

لدي تطبيق node.js على خادم ويب VPS بنظام تشغيل ubuntu، ويتم تخديم الموقع من خلال nginx بشكل reserved proxy.

والآن أحاول تحويل الاتصال إلى https، فهل يجب إضافة الشهادة على خادم الويب وتعديل إعدادات nginx فقط؟ أم هل هنالك أيضاً تعديلات يجب إجرائها على الكود البرمجي في express.js؟

لأنني لاحظت وجود كل من http و https أثناء تشغيل الخادم:

var http = require('http');

var https = require('https');

فهل يجب علي إجراء هذه التعديلات أم يكفي إضافة الشهادة على الخادم وتحويل النطاق إلى https؟

Recommended Posts

  • 1
نشر

اذا كانت لديك شهادة ssl يمكنك استخدام express بدون تعديلات

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

ستكون الاعدادات الاولية الخاصة ب nginx كالتالي

server {
  listen       80;
  server_name  localhost;

  location / {
    proxy_pass http://localhost: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;
  }
}

كما ترى  سيستمع خادم الويب إلى http: // localhost port 80. يخبر الموقع / الكتلة NGINX ما يجب فعله مع أي طلب وارد نستخدم proxy_pass للإشارة إلى تطبيق Node.js الخاص بنا  والذي يعمل على http: // localhost: 3000 في حالتنا.

في هذه المرحلة  يجب عليك حفظ الملف وكتابة ما يلي لإعادة تشغيل NGINX 

sudo service nginx restart

الأن يمكنك اظافة تعديلات ل nginx لتفعيل ssl 

server {
  listen       80;
  listen       443 ssl; //https port
  server_name  localhost;

  ssl_certificate  /etc/nginx/ssl/server.crt;//الشهادة
  ssl_certificate_key /etc/nginx/ssl/server.key; // مفتاح الشهادة

  location / {
    proxy_pass http://localhost: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;
  }
}

يمكنك الأن حفظ الملف واعادة تشغيل nginx مجددا 

الآن  إذا قمت بالوصول إلى https: // localhost ، فسيكون اتصالك آمنًا. يفترض التكوين أعلاه أن الشهادة والمفتاح الخاص موجودان في /etc/nginx/ssl/server.crt و /etc/nginx/ssl/server.key على التوالي ، ولكن يمكنك تغيير هذه المواقع إذا كنت ترغب في ذلك.

  • 1
نشر
بتاريخ 30 دقائق مضت قال Tamim Fahed:

فهل يجب علي إجراء هذه التعديلات أم يكفي إضافة الشهادة على الخادم وتحويل النطاق إلى https؟

مرحباً @Tamim Fahed
يجب أن تقوم بشراء شهادة SSL وبعد تفعيلها من قبل المزود ستحصل على ملفات private.key و domain_name.crt و CA_root.crt وca_bundle_certificate.crt  ستحتاجهم في الخطوة التالية بعد ذلك في ملف ال server.js أو أي كان الإسم لديك الخاص بملف السيرفر قم بإضافة 
 

var https = require('https');

var fs = require('fs');

بعد ذلك نقوم https properties اوبجيكت هكذا 

var https_properties = {   key: fs.readFileSync("/dir/to/private.key"),   cert: fs.readFileSync("/dir/to/domain_name.crt"),   ca: [           fs.readFileSync('dir/to/CA_root.crt'),           fs.readFileSync('dir/to/ca_bundle_certificate.crt')        ] };

مع تغيير /dir/to إلى المسار الموجود فيه الملفات الخاص بالشهادة على سيرفرك 
بعد ذلك نقوم بعمل إتصال بالسيرفر من خلال https مع تضمين ال https_properties الذي قمنا بعمله سابقاً هكذا

https.createServer(https_properties, function (req, res) {  res.writeHead(200);  res.end("Welcome to my HTTPS server "); }).listen(8443)

بعد ذلك يجب أن يعمل السيرفر بإتصال https 

  • 0
نشر

بما أنك تستخدم express فيمكنك إنشاء خادم https وتمرير app اليه كما في المثال

var express = require('express');
var https = require('https');
var http = require('http');
var fs = require('fs');

// قراة ملف المفتاح وملف الشهادة
var options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.cert')
};

var app = express();

/* إنشاء خادم 
 * http
 * وتمرير 
 * app 
 * إليه
*/
http.createServer(app).listen(80);
/* إنشاء خادم 
 * https
 * ويستمع الى منفذ آخر
 * وتمرير 
 * app 
 * إليه
*/
https.createServer(options, app).listen(443);

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...