Nginx هو أحد أشهر خوادم الويب عالميا وهو المسؤول عن استضافة بعض أكبر المواقع وأكثرها ازدحاما على الإنترنت. يُعد Nginx غالبا أفضل من Apache من ناحية ملاءمته للموارد، ويمكن استخدامه كخادم ويب أو وكيل عكسي (reverse proxy). في هذا المقال سنشرح كيفية تثبيت Nginx على خادم أوبونتو 18.04.
المتطلبات
قبل البدء، تحتاج لمستخدم عادي - غير مسؤول - بصلاحيات "sudo" معد على الخادم. يمكنك معرفة كيفية إعداد خادم عادي في مقال الإعداد الأولي لِخادم أوبونتو 18.04.
إن كان لديك حساب متاح، سجل الدخول إلى المستخدم غير المسؤول للبدء.
خطوة 1 - تثبيت Nginx
يمكنك تثبيت Nginx باستخدام مدير الحزم "apt
" وذلك لأنه متاح في مخزن أوبونتو الافتراضي.
ولأنها أول مرة نَستخدم فيها نظام تحزيم "apt
"، سنُحدِث الحزمة المحلية الرئيسية كي نحصل على قائمة بأحدث الحزم. ثم ننفذ أمر تثبيت nginx
:
$ sudo apt update
$ sudo apt install nginx
بعد الموافقة على الإجراءات سيُثبِّت apt
Nginx وأي متعلقات يتطلبها الخادم.
خطوة 2 - إعداد جدار الحماية
قبل اختبار Nginx، يجب إعداد جدار الحماية كي يتيح الوصول للخدمة. يُسجل Nginx نفسه كخدمة في ufw
أثناء التثبيت مما يجعل السماح بالدخول إلى Nginx أسهل.
أدرج إعدادت التطبيق التي تعلم ufw
كيف تتعامل معها باستخدام الأمر:
$ sudo ufw app list
يجب أن تحصل على قائمة بملفات تعريف التطبيق:
المخرجات:
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
يوجد ثلاثة ملفات تعريف ل Nginx متاحة كما ترى:
- Nginx Full: يفتح هذا الملف كِلا المنافذ 80 (حركة مرور الويب العادية وغير المشفرة)، والمنفذ 443 (حركة المرور المشفرة TLS/SSL)
- Nginx HTTP: يفتح هذا الملف المنفذ 80 فقط (حركة مرور الويب العادية وغير المشفرة)
- Nginx HTTPS: يفتح هذا الملف المنفذ 443 فقط (حركة المرور المشفرة TLS/SSL)
يستحسن تفعيل الملف الأكثر صرامة والذي لا يزال يسمح بحركة المرور التي تم إعدادها. لأننا لم نقم بإعداد SSL للخادم بعد، نحتاج لتفعيل المنفذ 80 فقط.
يمكنك تفعيله باستخدام الأمر:
$ sudo ufw allow 'Nginx HTTP'
للتحقق من التغييرات:
$ sudo ufw status
يجب أن ترى أن حركة المرور باستخدام HTTP مفعلة كما في المخرجات:
المخرجات:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
خطوة 3 - فحص خادم الويب
بعد انتهاء عملية التثبيت، سيُشغل أوبونتو Nginx. يجب أن يكون خادم الويب يعمل.
يمكننا التحقق من ذلك باستخدام نظام التهيئة systemd
عن طريق الأمر:
$ systemctl status nginx
المخرجات:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-04-20 16:08:19 UTC; 3 days ago
Docs: man:nginx(8)
Main PID: 2369 (nginx)
Tasks: 2 (limit: 1153)
CGroup: /system.slice/nginx.service
├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2380 nginx: worker process
كما ترى في الأعلى، يظهر أن الخدمة بدأت بنجاح. لكن الطريقة المثلى لاختبار ذلك هو جلب صفحة من Nginx فعليا.
يمكنك الوصول إلى صفحة Nginx الرئيسية لتتأكد من أن التطبيق يعمل بطريقة صحيحة عن طريق الدخول إلى عنوان بروتوكول الإنترنت (IP) الخاص بالخادم. يمكنك الحصول عليه بعدة طرق.
جرب تنفيذ هذا الأمر على شاشة أوامر الخادم:
$ ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
ستحصل على بعض الأسطر التي يمكنك تجريبها سطرًا تلو الآخر على متصفح الإنترنت لتتأكد إن كانت تعمل.
الطريقة الأخرى هي عبر تنفيذ الأمر التالي، والذي سيعطيك عنوان بروتوكول الإنترنت العام للخادم كما يُرى على المواقع الآخرى على الإنترنت:
$ curl -4 icanhazip.com
عند حصولك على عنوان بروتوكول الإنترنت الخاص بالخادم، أدخله إلى شريط المتصفح:
http://your_server_ip
يجب أن ترى الصفحة الرئيسية ل Nginx:
تُضمَّن هذه الصفحة مع Nginx لتأكيد أن Nginx يعمل بطريقة صحيحة.
خطوة 4 - إدارة عملية Nginx
الآن وبما أن خادم الويب أصبح يعمل بطريقة صحيحة، لنراجع بعض أوامر التحكم الأساسية.
لإيقاف خادم الويب نفذ الأمر:
$ sudo systemctl stop nginx
لِتشغيل خادم الويب عندما يكون موقفا، نفذ الأمر:
$ sudo systemctl start nginx
لِإيقاف وإعادة تشغيل الخدمة استخدم الأمر:
$ sudo systemctl restart nginx
إن كنت تقوم بتعديل في إعدادت Nginx، فإنه يٌعيد التحميل بدون قطع اتصالاته. للقيام بذلك نفذ الأمر:
$ sudo systemctl reload nginx
Nginx مٌعد ليبدأ تلقائيا مع بدء تشغيل الخادم. إن كنت لا تريد ذلك؛ يمكنك إلغاء تفعيل هذه الميزة باستخدام الأمر:
$ sudo systemctl disable nginx
لإعادة تفعيل هذه الميزة:
$ sudo systemctl enable nginx
خطوة 5 - إعداد أجزاء الخادم (Server Blocks) (إعداد مستحسن)
عند استخدام خادم Nginx، أجزاء الخادم (شبيهة بالمضيف الوهمي [virtual host] في Apache) تُستخدم لتغليف تفاصيل الإعدادات وتمكين استضافة أكثر من نطاق من خادم واحد. سنقوم بإعداد نطاق ونُسمية example.com، يمكنك استبدال هذا الاسم باسم النطاق الذي تريده. لدى Nginx جزء خادم مُفعَّل تلقائيا على أوبونتو ومُعَد لتشغيل الملفات في مجلد "/var/www/html
". رغما من أن هذا يعمل بشكل جيد لموقع واحد؛ إلا أنه ليس عمليا إن كنت تستضيف عدة مواقع. عوضا عن التعديل على /var/www/html
؛ لنقم بإنشاء بينة هيكلية في /var/www
لموقع example.com ونترك /var/www/html
في مكانه كَمجلد رئيسي ليعمل في حال طلب أحد العملاء صفحة لا توافق بقية المواقع.
أنشئ مجلدا ل example.com كما يلي مستخدما -p
لإنشاء أي مجلدات ضرورية أخرى:
$ sudo mkdir -p /var/www/example.com/html
ثم قم بمنح ملكية الجلد باستخدام متغير البيئة $USER
:
$ sudo chown -R $USER:$USER /var/www/example.com/html
يجب أن تكون صلاحيات جذور الويب صحيحة إن كنت لم تقم بتعديل قيمة umask
يمكنك التأكد من ذلك باستخدام الأمر:
$ sudo chmod -R 755 /var/www/example.com
قم بإنشاء صفحة كعينة index.html
باستخدام الأمر nano
على مُحررك المفضل:
$ nano /var/www/example.com/html/index.html
بداخل هذه الصفحة، ضع عينة HTML التالية:
/var/www/example.com/html/index.html
<html> <head> <title>Welcome to Example.com!</title> </head> <body> <h1>Success! The example.com server block is working!</h1> </body> </html>
بعد الانتهاء احفظ وأغلق الملف.
كي يقوم Nginx بمعالجة هذا المحتوى، فمن الضروري إنشاء جزء خادم (server block) بالموجهات الصحيحة. بدلا من القيام بذلك عبر تعديل ملفالإعداد الافتراضي مباشرة، لنُنشئ ملفًا جديدًا في /etc/nginx/sites-available/example.com
:
$ sudo nano /etc/nginx/sites-available/example.com
قم بنسخ جزء الإعداد التالي الشبيه بالافتراضي لكنه محدث للمجلد واسم المجلد الجديد:
/etc/nginx/sites-available/example.com
server { listen 80; listen [::]:80; root /var/www/example.com/html; index index.html index.htm index.nginx-debian.html; server_name example.com www.example.com; location / { try_files $uri $uri/ =404; } }
لاحظ أننا قمنا بتحديث إعداد root
للمجلد الجديد و server_name
لاسم النطاق الجديد.
ثم نقوم بتفعيل الملف من خلال إنشاء رابط منه إلى مجلد sites-enabled
والذي يقوم Nginx بالقراءة منه أثناء التشغيل:
$ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
الآن أصبح لدينا جزئي خادم مفعلين ومُعدين للاستجابة للطلبات وفقا لموجهي listen
و server_name
(يمكنك قراءة المزيد حول كيفية معالجة Nginx لهذه الموجهات في هذا المقال
-
example.com
: سيستجيب للطلب علىexample.com
وwww.example.com
. -
default
: سيستجيب لأي طلبات على المنفذ 80 والتي لا تطابق جزء آخر.
لتجنب مشكلة "hash bucket memory" التي قد تطرأ من إضافة أسماء خوادم إضافية، من الضروري تعديل قيمة واحدة في ملف /etc/nginx/nginx.conf
. افتح هذا الملف:
$ sudo nano /etc/nginx/nginx.conf
ابحث عن الموجّه server_names_hash_bucket_size
واحذف رمز #
لإلغاء تعليق هذا السطر:
/etc/nginx/nginx.conf
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
ثم نتحقق من عدم وجود من أي أخطاء في جمل ملفات Nginx:
$ sudo nginx -t
احفظ وأغلق الملف بعد انتهائك.
إن لم يكن هناك أي أخطاء أعد تشغيل Nginx لتفعيل التغييرات:
$ sudo systemctl restart nginx
يجب أن يقوم Nginx الآن بالاستجابة للطلبات على النطاق الجديد. للتحقق من ذلك، ادخل على http://example.com
. هنا يجب أن ترى شيئا كالتالي:
خطوة 6 - التعرف على مجلدات وملفات Nginx المهمة
الآن، وبعد أن أصبحت تعرف كيف تُدير خدمة Nginx. يجب أن تأخذ لمحة سريعة حول بعض المجلدات والملفات المهمة.
المحتوى
-
/var/www/html
: محتوى الويب الفعلي ل Nginx والذي يحتوي فقط على صفحة Nginx الافتراضية التي رأيناها سابقا. تُعرض هذه الصفحة من مجلد /var/www/html
. يمكن تغيير هذا الإعداد عن طريق ملف إعداد Nginx.
إعداد الخادم
-
/etc/nginx
: مجلد إعداد Nginx والذي يحوي جميع ملفات التكوين. -
/etc/nginx/nginx.conf
: ملف تكوين Nginx الرئيسي. يمكن تعديل هذا الملف لتغيير الإعدادات العامة ل Nginx. -
/etc/nginx/sites-available/
: المجلد الذي يتم تخزين أجزاء الخادم فيه. لن يقوم Nginx باستخدام ملفات التكوين الموجودة في هذا المجلد إلا إذا تم ربطها لمجلدsites-enabled
. بشكل عام، يتم تخزين ملفات إعداد أجزاء الخادم في هذا المجلد ثم تُفعّل بربطها بالمجلد الآخر. -
/etc/nginx/sites-enabled/
: المجلد الذي يتم تخزين أجزاء الخادم لكل موقع (per-site server blocks) فيه. تُنشئ هذه المجلدات بربط ملفات التكوين الموجودة في مجلدsites-available
. -
/etc/nginx/snippets
: يحتوي هذا المجلد على أجزاء التكوين التي يمكن تضمينها في أي مكان آخر في تكوين Nginx. أجزاء الإعداد المُكررة عن قصد تُعد بدائل جيدة لإعادة بناء أجزاء الأكواد البرمجية.
سجلات الخادم
-
/var/log/nginx/access.log
: يتم تخزين كل طلب يصل إلى خادم الويب في ملف السجل هذا إلا إن كان Nginx مُعد لعدم القيام بذلك. -
/var/log/nginx/error.log
: يتم تسجيل أي خطأ في Nginx في هذا السجل.
الآن وبما أن خادم الويب أصبح مُعدًا لديك، فلديك عدة خيارات للمحتوى الذي يمكن أن يعالجه الخادم والتقنيات التي يمكن أن تستخدمها لتجربة أفضل.
الخلاصة
إن كنت تريد بناء حزمة تطبيق متكاملة، اطلع على هذا المقال عن كيفية إعداد حزمة LEMP على أوبونتو 18.04.
ترجمة -وبتصرف- للمقال How To Install Nginx on Ubuntu 18.04 لصاحبيه Justin Ellingwood و Kathleen Juell.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.