كيفية إعداد إنجن إكس (Nginx) بدعم (HTTP/2) على أوبونتو (Ubuntu) 18.04

إعداد Nginx مع دعم HTTP/2 على Ubuntu

تشتهر Nginx بسرعتها وموثوقيتها كخادم ويب مفتوح المصدر. تشتهر بمتطلبات الذاكرة المنخفضة، وقابلية التوسع العالية، والتكوين السهل، ودعم العديد من البروتوكولات.

بروتوكول Hypertext Transport Protocol هو المكان الذي نشأت منه HTTP/2 مؤخرًا. يستخدم هذا الأخير على الويب لتسليم الصفحات من الخادم إلى المتصفح. HTTP/2 هو أول تحديث رئيسي لـ HTTP منذ ما يقرب من عشرين عامًا. تم تقديم HTTP 1,1 للجمهور في نهاية القرن العشرين، عندما كانت صفحات الويب عبارة عن ملف طويل واحد فقط من HTML مع ورقة أسلوب CSS داخلية. بعد ذلك، خضع الإنترنت لتحول كبير، ونحن نواجه الآن قيود HTTP 1.1. بسبب كيفية تنزيل أجزاء من الصفحة في قائمة انتظار (قد يبدأ تنزيل القسم التالي فقط بعد الانتهاء من القسم السابق)، فإنه يقلل من معدلات التحويل القابلة للتحقيق لمعظم المواقع الحالية ؛ في المتوسط، تتطلب كل صفحة ويب حديثة ما يقرب من 100 طلب للتنزيل (كل طلب عبارة عن صورة وملف JS وملف CSS وما إلى ذلك).

لماذا HTTP/2:

HTTP/2 يأتي بحل لهذه المشكلة من خلال بعض التغييرات الأساسية:

  • يتم تنزيل الطلبات بالتوازي وليس في قائمة انتظار.
  • يتم ضغط رؤوس HTTP.
  • لا يتم نقل الصفحات كملف نصي، بل كملف ثنائي لتحقيق نتائج أفضل.
  • يمكن للخوادم «دفع» البيانات حتى بدون طلب المستخدم، مما يحسن السرعة للمستخدمين ذوي السبيب العالي.

بغض النظر عن حقيقة أن HTTP/2 لا يتطلب أي تشفير، ذكر مطورو Google Chrome و Mozilla Firefox، المتصفحات الأكثر استخدامًا على الإنترنت، أنهم سيدعمون HTTP/2 فقط لاتصالات HTTPS لأسباب أمنية. ومع ذلك، ستحتاج أيضًا إلى تأمينها باستخدام HTTPS إذا قررت استخدام الدعم HTTP/2 لإعداد الخوادم.

نزودك بهذا الدليل الذي سيساعدك على استخدام الدعم HTTP/2 لإنشاء خادم Nginx سريع وآمن.

متطلبات

أول شيء، قبل البدء، هذه الأشياء ضرورية:

  • قم بإعداد خادم Ubuntu 18.04 باستخدام دليل إعداد الخادم الأولي Ubuntu 18.04، بما في ذلك مستخدم سودو غير جذري وجدار حماية.
  • ثبت Nginx على الخادم الخاص بك.
  • قم بتهيئة اسم نطاق للإشارة إلى الخادم الخاص بك. يمكن شراؤها بسعر مناسب على WebHi Technology،
  • قم بتهيئة شهادة TLS/SSL للخادم الخاص بك. هناك ثلاثة احتمالات:
    • الحصول على شهادة مجانية من Let’ s Encrypt
    • توليد وتهيئة شهادة ذاتية التوقيع
    • شرائه من مزود آخر وتهيئة Nginx لاستخدامه
  • قم بتهيئة Nginx لإعادة توجيه حركة المرور من المنفذ 80 إلى المنفذ 443، والذي يتم تغطيته بالشروط الأساسية مسبقًا.
  • قم بتكوين Nginx لاستخدام مفتاح 2084-bit أو مفتاح سريع الزوال Diffie-Hellman (DHE)، والذي يجب أن يكون أيضًا في المتطلبات السابقة.

الخطوة 1 – تنشيط دعم HTTP/2

أولاً، يجب أن يحتوي نطاقك بالفعل على كتلة خادم عند /etc/nginx/sites-available/your_domain مع ضبط التوجيه server_name بشكل مناسب. سيكون التغيير الأول الذي سيتم إجراؤه هو السماح لكتلة خادم المجال الخاص بك باستخدام HTTP/2 عن طريق تعديلها.

أطلق ملف أعدادات المجال الخاص بك:

$ sudo nano /etc/nginx/sites-available/your_domain

حدد موقع متغيرات الاستماع المتعلقة بالمنفذ 443 في الملف:

...
    listen [::]:443 ssl ipv6only=on;
    listen 443 ssl; 
...

ينتمي المتغير الأول إلى اتصالات IPv6، والثاني لجميع اتصالات IPv4. HTTP/2 يجب تمكينه لكليهما.

يجب تعديل كل توجيه استماع ليشمل http2:

...
    listen [::]:443 ssl http2 ipv6only=on;
    listen 443 ssl http2; 
...

هذا يطلب استخدام HTTP/2 من Nginx مع المتصفحات المدعومة.

حرر محرر النص بعد حفظ ملف الاعدادات.

في كل مرة يتم إجراء تغييرات على ملفات اعدادات Nginx، تأكد أيضًا من الانتباه إلى أخطاء البناء في التكوين، من خلال:

$ sudo nginx -t

سيظهر المخرج التالي إذا كان البناء خاليًا من الأخطاء:

Output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

بعد ذلك، يجب تكوين الخادم الخاص بنا للسماح باستخدام قائمة شفرات أكثر تحديدًا.

الخطوة 2 – إزالة التشفير القديمة وغير الآمنة

هناك قائمة سوداء من الشفرات القديمة وغير الآمنة في HTTP/2 يجب تجنبها. أجنحة التشفير هي خوارزميات تشفير تصف الطريقة التي يجب بها تشفير البيانات المنقولة.

تعتمد الطريقة التي من المفترض أن تستخدمها لتحديد الشفرات على التكوين الذي اخترته لشهادات Nginx TLS/SSL.

إذا حصلت على شهادتك من خلال Certbot، فسيتم إنشاء الملف /etc/letsencrypt/options-sl-nginx.conf ويحتوي على شفرات ليست قوية بما يكفي HTTP/2. لسوء الحظ، سيمنع Certbot من تطبيق التحديثات في المستقبل إذا تم تعديل هذا الملف. في هذه الحالة، سنقول لـ Nginx عدم استخدام هذا الملف مع تحديد قائمة الشفرات الخاصة بنا.

قم بتشغيل ملف تكوين كتلة خادم النطاق الخاص بك:

$ sudo nano /etc/nginx/sites-available/your_domain

حدد الخط الذي يحتوي على ملف الخيارات ssl-nginx.conf وعلق عليه:

# include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

يضاف السطر التالي تحت هذا السطر من أجل تعريف الشفرات المسموح بها:

ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

اخرج من المحرر بعد حفظ الملف.

في محرر النص الخاص بك، انطلق وافتح الملف /etc/nginx/snippets/ssl-params.conf إذا استخدمت شهادات موقعة ذاتيًا أو شهادة طرف ثالث وقمت بتكوينها بناءً على المتطلبات الأساسية:

$ sudo nano /etc/nginx/snippets/ssl-params.conf

ابحث عن هذا الخط:

...
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;

قم بتحريرها لتبدو هكذا:

...
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

اخرج من المحرر بعد حفظ الملف.

تأكد، هذه المرة أيضًا، من التحقق من أخطاء البناء في الاعدادات:

$ sudo nginx -t

إذا حددت خطأ، قم بمعالجته، ثم اختبر مرة أخرى.

إعادة تشغيل Nginx بمجرد عدم وجود أخطاء في البناء

$ sudo systemctl restart nginx

إعادة تشغيل Nginx بمجرد عدم وجود أخطاء في البناء

الخطوة 3 – التحقق من تفعيل HTTP/2

يجب أن نتحقق من أن الخادم يعمل ويمكنه العمل مع HTTP/2.

قدم طلبًا إلى موقعك باستخدام أمر curl وعرض الرؤوس:

$ curl -I -L https://your_domain

وسيظهر الناتج التالي:

Output:
HTTP/1.1 301 Moved Permanently
Server: nginx/1.14.0 (Ubuntu)
Date: Fri, 06 Jul 2018 19:07:12 GMT
Content-Type: text/html
Content-Length: 194
Connection: keep-alive
Location: https://your_domain/
HTTP/2 200
server: nginx/1.14.0 (Ubuntu)
date: Fri, 06 Jul 2018 19:07:12 GMT
content-type: text/html
content-length: 16
last-modified: Fri, 06 Jul 2018 16:55:37 GMT
etag: "5b3f9f09-10"
accept-ranges: bytes

من الممكن أيضًا التحقق من تشغيل HTTP/2 في Google Chrome. أطلق Chrome واذهب إلى http://your_domain. افتح أدوات مطور Chrome (ViewDeveloperDeveloper Tools), ثم أعد تحميل الصفحة (ViewReload This Page). انتقل إلى علامة Network، انقر يمينًا على صف رأس الطاولة بدءًا من «الاسم»، ثم حدد خيار البروتوكول من القائمة المنبثقة.

سترى h2 (في إشارة إلى HTTP/2) في عمود بروتوكول جديد، مما يشير إلى أن HTTP/2 يعمل.

دعم HTTP/2 على Ubuntu nginx

أنت مستعد لتقديم المحتوى باستخدام بروتوكول HTTP/2 الآن. دعنا ننتقل إلى زيادة الأمان والأداء من خلال تمكين HSTS.

الخطوة 4 – تمكين أمن النقل الصارم HTTP (HSTS)

يمكنك تمكين HTTP Strict Transport Security (HSTS) لتجنب الاضطرار إلى إعادة التوجيه إلى HTTPS حتى لو تضمنته طلبات HTTP الخاصة بك. إذا حدد المتصفح رأس HSTS، فلن يحاول الاتصال بالخادم عبر HTTP العادي مرة أخرى لفترة من الوقت. بغض النظر عن السبب، سيستخدم اتصال HTTPS مشفر فقط لتبادل البيانات. هذه الرأس تحمينا أيضًا من هجمات خفض التصنيف.

في محررك، انطلق وأطلق ملف اعدادات Nginx:

$ sudo nano /etc/nginx/nginx.conf

أضف هذا السطر إلى الملف من أجل تنشيط HSTS:

http {
...
    ##
    # Virtual Host Configs
    ##
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    add_header Strict-Transport-Security "max-age=15768000" always;
}
...

يتم تعيين max-age للعمر في ثوانٍ. القيمة 15768000 تعادل 6 أشهر.

لا يضاف هذا الرأس إلى طلبات subdomain افتراضيًا. إذا كان لديك مناطق فرعية وتريد تطبيقها بواسطة HSTS، فقم بإضافة متغير includeSubDomains في نهاية السطر مثل هذا:

add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;

اخرج من المحرر بعد حفظ الملف.

تحقق من أخطاء البناء في الاعدادات هذه المرة أيضًا:

$ sudo nginx -t

أخيرًا، لتطبيق التغييرات، انطلق وأعد تشغيل خادم Nginx

$ sudo systemctl restart nginx

خلاصة

خادم Nginx الخاص بك يقدم الآن HTTP/2 صفحات. قم بإجراء اختبار مقابل الخادم الخاص بك إذا كنت ترغب في اختبار قوة اتصال SSL الخاص بك.

LEAVE A COMMENT