كيفية خدمة النطاقات الفرعية أو النطاقات المتعددة باستخدام NGINX

هل لديك خادم بعنوان IP عام واحد فقط وتحتاج إلى استضافة عدة نطاقات أو نطاقات فرعية؟ ماذا ستفعل؟ يمكن أن يكون هذا السيناريو محيرًا إذا كنت مبتدئًا. ولكن لا داعي للقلق، فإن هذا البرنامج التعليمي لديه كل ما تحتاجه، حتى تتمكن من خدمة نطاق فرعي لـ NGINX وعدة نطاقات.

في هذا البرنامج التعليمي، ستتعلم كيفية خدمة فعالة لنطاقات فرعية NGINX أو عدة نطاقات على خادم واحد بعنوان IP واحد!

إذا كنت جاهزًا، حان الوقت للبدء في ذلك!

المتطلبات الأساسية

يأتي هذا البرنامج التعليمي مع عروض توضيحية عملية ولكنه لا يتطلب العديد من المتطلبات المسبقة وسيفترض أن لديك خادم Ubuntu Server LTS مع SSH مفعل و NGINX مثبت. العروض التوضيحية في هذا البرنامج التعليمي تعتمد على خادم Ubuntu Server LTS 20.04.1.

إعداد سجلات DNS

قبل أن تتمكن من خدمة نطاقات فرعية NGINX أو عدة نطاقات، ستحتاج إلى إضافة سجل A في لوحة تحكم DNS. يربط سجل A ويشير جميع النطاقات والنطاقات الفرعية بعنوان IP واحد للسماح لمتصفحي الويب بالعثور على موقع الويب الخاص بك.

1. قم بتشغيل متصفح الويب المفضل لديك، وقم بتسجيل الدخول إلى لوحة تحكم DNS الخاصة بك.

2. انقر على إضافة سجل لبدء إضافة سجلات A. يتم توجيه متصفحك إلى صفحة حيث ستقوم بتكوين إعدادات DNS الخاصة بنطاقك والنطاقات الفرعية.

Adding an A Record

الآن قم بتكوين إعدادات DNS باستخدام الآتي:

حدد سجل A في حقل النوع.

أدخل @ في حقل المضيف، وعنوان IP الخاص بالخادم الخاص بك في حقل القيمة.

اختر القيمة المرغوبة في حقل TTL، ثم انقر فوق زر تأكيد لحفظ الإعدادات.

كرر نفس العملية للنطاقات الفرعية الأخرى.

Configuring DNS settings for Domain and Subdomains The final DNS Settings page looks like the one below.

تبدو الصفحة النهائية لـ إعدادات DNS مثل الصورة أدناه.

Viewing DNS Settings Page

قد تختلف لوحة تحكم سجل DNS الخاصة بك من حيث الوظائف والتصميم، ولكن نفس المبادئ ستنطبق على الجميع.

إعداد الدلائل الويبية لنطاق NGINX ونطاق فرعي

الآن بعد أن قمت بإضافة سجلات A لنطاقك والنطاقات الفرعية الخاصة بك، حان الوقت لإعداد الدلائل الويبية الخاصة بها. يأتي NGINX مع ملف مضيف افتراضي ومكون لتقديم دليل ويب يقع في /usr/share/nginx/html.

سوف تقوم بإنشاء دليل ويب منفصل لكل نطاق داخل جذر المستند الافتراضي لـ NGINX (/var/www/html).

1. أولاً، افتح الطرفية الخاصة بك وقم بتشغيل الأوامر أدناه لإنشاء دليل الويب لجميع النطاقات والنطاقات الفرعية. يفصل هذا الإجراء بين الملفات وينظمها ويعزلها لكل موقع ويب.

sudo mkdir /var/www/html/awstutorial.net
sudo mkdir /var/www/html/web1.awstutorial.net
sudo mkdir /var/www/html/web2.awstutorial.net

2. بعد ذلك، قم بتشغيل أمر chown لتغيير ملكية كل دليل قمت بإنشائه في الخطوة الأولى بشكل تكراري (-R) إلى مستخدم ومجموعة www-data. أنت تقوم بتغيير ملكية كل دليل إلى مستخدم ومجموعة www-data نظرًا لأن NGINX يعمل كمستخدم www-data.

sudo chown -R www-data:www-data /var/www/html/awstutorial.net
sudo chown -R www-data:www-data /var/www/html/web1.awstutorial.net
sudo chown -R www-data:www-data /var/www/html/web2.awstutorial.net

3. قم بإنشاء ملف بالاسم index.html في محرر الشيفرة المفضل لديك ثم قم بنسخ/لصق الشيفرة أدناه إلى ملف index.html. احفظ الملف داخل الدليل الرئيسي للموقع الويب (/var/www/html/awstutorial.net).

يقوم الشيفرة HTML أدناه بعرض رسالة تقول “تهانينا! يعمل موقع awstutorial.net!” عند فتح ملف index.html في متصفح الويب.

<html>
	<head>
	  <title>Welcome to awstutorial.net!</title>
  </head>
	  <body>
	    <h1>Congratulations! The awstutorial.net website is working!</h1>
    </body>
</html>

4. في الختام، قم بإنشاء نفس index.html في الدليلين /var/www/html/web1.awstutorial.net و /var/www/html/web2.awstutorial.net. ولكن قم بتغيير awstutorial.net بـ web1.awstutorial.net و web2.awstutorial.net في شيفرة كل index.html على التوالي.

إعداد مضيف افتراضي لخادم NGINX للنطاق والنطاقات الفرعية

لديك بالفعل صفحة index.html لنطاقك والنطاقات الفرعية لتقديمها من خلال خادم NGINX. الخطوة التالية هي إنشاء ملف تكوين مضيف افتراضي NGINX لكل نطاق لتقديم صفحات HTML.

1. قم بإنشاء ملف تكوين مضيف افتراضي لـ NGINX بالاسم awstutorial.net في محرر الكود المفضل لديك، ثم انسخ / الصق الكود أدناه إلى هذا الملف. احفظ الملف في الدليل /etc/nginx/sites-available/.

الكود أدناه يتحكم في سلوك الخادم الخاص بك، مثل اسم الخادم وصفحة الفهرس (الرئيسية) عندما يحاول المستخدم الوصول إلى نطاقك.

server {
        # يربط منفذ TCP 80.
        listen 80; 

				# الدليل الجذر المستخدم للبحث عن ملف
        root /var/www/html/awstutorial.net;
				# يحدد الملف المستخدم كصفحة فهرس
        index index.html index.htm;
				# يحدد اسم النطاق أو النطاق الفرعي.
        # إذا لم يتم تعريف server_name في كتلة الخادم ثم
				# يستخدم Nginx الاسم 'فارغ'
        server_name awstutorial.net;

        location / {
            # إرجاع خطأ 404 في الحالات التي يتلقى فيها الخادم
						# طلبات لملفات ودلائل غير قابلة للتتبع.
            try_files $uri $uri/ =404;
        }
    }

2. بعد ذلك، قم بتشغيل الأمر nginx التالي لفحص (-t) ملف تكوين NGINX لأي خطأ في الصياغة.

sudo nginx -t

إذا لم يتم العثور على أي خطأ في صيغة ملف تكوين NGINX، ستحصل على النتيجة التالية.

Verifying NGINX configuration file

3. بعد ذلك، قم بتشغيل الأمر أدناه لإنشاء رابط رمزي (ln -s) من /etc/nginx/sites-available إلى الدليل /etc/nginx/sites-enabled/. يتيح هذا الأمر ملف تكوين الاستضافة الظاهرية awstutorial.net.

sudo ln -s /etc/nginx/sites-available/awstutorial.net /etc/nginx/sites-enabled/

صيغة sites-available و sites-enabled هي قياسية في تثبيت NGINX على Ubuntu ولكن قد يستخدم توزيعات أخرى معيارًا مختلفًا.

4. كرر الخطوات من واحد إلى ثلاث لإنشاء ملفات تكوين استضافة NGINX افتراضية تسمى web1.awstutorial.net و web2.awstutorial.net.

قم بتغيير الأسطر التالية في كل ملف تكوين استضافة NGINX:

  • استبدل السطر root /var/www/html/awstutorial.net بدليل الجذر لكل فرع فرعي (root /var/www/html/web1.awstutorial.net و root /var/www/html/web2.awstutorial.net).
  • استبدل السطر server_name awstutorial.net باسم كل فرع فرعي (server_name web1.awstutorial.net و server_name web2.awstutorial.net).

5. الآن قم بتشغيل أوامر sudo ln أدناه كما فعلت في الخطوة الثالثة لتمكين ملفات تكوين الاستضافة الظاهرية.

# يمكّن ملف تكوين المضيف الظاهري لـ NGINX في web1.awstutorial.net
sudo ln -s /etc/nginx/sites-available/web1.awstutorial.net /etc/nginx/sites-enabled/
# يمكّن ملف تكوين المضيف الظاهري لـ NGINX في web2.awstutorial.net
sudo ln -s /etc/nginx/sites-available/web2.awstutorial.net /etc/nginx/sites-enabled/

6. قم بتشغيل الأمر التالي systemctl لإعادة تشغيل خدمة NGINX (restart nginx) لتطبيق جميع التغييرات في التكوين.

sudo systemctl restart nginx

7. في النهاية، قم بالتنقل إلى عناوين URL للنطاق والنطاقات الفرعية على متصفحك لاختبار ما إذا كانت المواقع تعمل بشكل جيد.

إذا تم تحميل النطاق والنطاقات الفرعية، سترى رسالة مثل الرسالة التالية.

Verifying websites are loading through the web browser.

إعداد HTTPS على NGINX النطاق والنطاقات الفرعية

لقد نجحت في إعداد واختبار نطاق NGINX ونطاقات فرعية على بروتوكول HTTP، وهذا رائع. ولكن عليك تأمين اتصال نطاقك ونطاقاتك الفرعية من خلال تمكين HTTPS. كيف؟ باستخدام شهادة ستحصل عليها من جهة إصدار الشهادات مثل Let’s Encrypt SSL.

1. أولاً، قم بتشغيل الأمر أدناه لتثبيت حزمة البرمجيات Certbot (apt-get install certbot). يتيح لك Certbot تنزيل شهادة SSL لنطاقك ونطاقاتك الفرعية.

sudo apt-get install certbot python3-certbot-nginx -y

2. بعد ذلك، قم بتشغيل الأمر التالي certbot لتحميل شهادة SSL (certonly) لنطاقك (-d awstutorial.net). لاحظ أنك توافق على شروط الخدمة (--agree-tos) باستخدام عنوان بريدك الإلكتروني (--email).

sudo certbot certonly --agree-tos --email [email protected] -d awstutorial.net

استبدل البريد الإلكتروني بالخاص بك.

3. أدخل ‘1’ لتحديد مكون الخادم الويب NGINX (nginx) للمصادقة مع CA ACME، كما هو موضح أدناه.

Selecting Plugin to Authenticate with ACME CA

بعد اختيار مكون الخادم الويب NGINX، سترى تقدم التنزيل لشهادة SSL لنطاقك (awstutorial.net).

بشكل افتراضي، تُخزن شهادات SSL الخاصة بـ Let’s Encrypt في الدليل /etc/letsencrypt/live/.

Showing Download Progress of the SSL Certificate

4. الآن قم بتشغيل كل أمر أدناه كما فعلت في الخطوة الثانية لتنزيل شهادات SSL للنطاقات الفرعية المتبقية (web1.awstutorial.net و web2.awstutorial.net).

sudo certbot certonly --agree-tos --email [email protected] -d web1.awstutorial.net
sudo certbot certonly --agree-tos --email [email protected] -d web2.awstutorial.net

5. في النهاية، قم بتشغيل الأمر ls أدناه لعرض جميع شهادات SSL في الدليل /etc/letsencrypt/live/ التي تحتوي (*) على awstutorial.net في أسمائها. يسمح ذلك لك بالتحقق من وجود شهادات SSL.

ls /etc/letsencrypt/live/*awstutorial.net/

أدناه، سترى شهادات SSL لنطاقك والنطاقات الفرعية.

Showing SSL certificate for all domains.

تكوين مضيف NGINX الافتراضي لاستخدام شهادات SSL

في هذه النقطة، لديك بالفعل شهادات SSL في تصرفك. ولكن كيف يمكنك استخدامها لتأمين نطاقك والنطاقات الفرعية؟ ستقوم بتحديد مسار الشهادات في كتلة server لكل ملف تكوين مضيف افتراضي NGINX.

1. افتح ملف تكوين مضيف NGINX الافتراضي لـ awstutorial.net الموجود في دليل /etc/nginx/sites-available/ باستخدام محرر الكود المفضل لديك.

2. استبدل محتوى الملف بالكود أدناه، حيث تقوم بتحديد مسار شهادة SSL النطاق الخاص بك، وبروتوكول SSL (تحت مسار الشهادة SSL).

server {
	     # يربط منفذ TCP 80.
       listen 80;
	     # يحدد اسم النطاق أو النطاق الفرعي.
       # إذا لم يتم تعريف server_name في كتلة الخادم ثم
	     # يستخدم Nginx الاسم 'فارغًا'
       server_name awstutorial.net;
	     # إعادة توجيه حركة المرور إلى
	     # كتلة الخادم HTTPS المقابلة برمز الحالة 301
       return 301 https://$host$request_uri;
       }

server {
        # يربط منفذ TCP 443 ويمكّن SSL.
        listen 443 SSL;
	      # الدليل الرئيسي المستخدم للبحث عن ملف
	      root /var/www/html/awstutorial.net; 
	      # يحدد اسم النطاق أو النطاق الفرعي.
        # إذا لم يتم تعريف server_name في كتلة الخادم ثم
	      # يستخدم Nginx الاسم 'فارغًا'
        server_name awstutorial.net;

	      # مسار شهادة SSL
        ssl_certificate /etc/letsencrypt/live/awstutorial.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/awstutorial.net/privkey.pem;
	      # استخدم الملف الذي تم إنشاؤه بواسطة أمر certbot.
        include /etc/letsencrypt/options-ssl-nginx.conf;
	      # حدد مسار ملف dhparam.pem.
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        location / {
	      # إرجاع خطأ 404 لحالات عندما يتلقى الخادم
	      # طلبات لملفات ومجلدات غير قابلة للتتبع.
        try_files $uri $uri/ =404;
        }

    }

3. كرر نفس العملية (الخطوات من واحد إلى اثنين) لملفات تكوين مضيف افتراضي المتبقية (web1.awstutorial.net و web2.awstutorial.net). ولكن تأكد من استبدال مسار شهادة SSL بمسار شهادة النطاق الفرعي الخاص بك (تحت مسار شهادة SSL).

4. الآن أعد تشغيل الأمر systemctl أدناه لإعادة تشغيل خدمة NGINX لتطبيق تغييرات التكوين.

sudo systemctl restart nginx

5. في النهاية، انتقل إلى عناوين URL الخاصة بنطاقك ونطاق فرعي على متصفح الويب الخاص بك. ولكن هذه المرة، بدلاً من بروتوكول HTTP، استخدم HTTPS لمعرفة ما إذا كانت تعمل.

أدناه، يمكنك رؤية رمز القفل في شريط العنوان، مما يشير إلى أن الموقع مؤمن بشهادة SSL الخاصة بك.

Verifying Domain is Secure

الختام

في هذا البرنامج التعليمي، لقد تعلمت كيفية خدمة نطاق فرعي NGINX أو عدة نطاقات من خلال تكوين ملف تكوين مضيف افتراضي. كما تطرقت أيضًا إلى تأمين نطاقاتك بشهادة SSL التي قمت بتحديدها أيضًا في ملف تكوين مضيف افتراضي.

الآن، لماذا لا تستخدم هذا الإعداد في بيئة إنتاجية، مثل استضافة تطبيقات متعددة على خادم واحد، وتوفير استضافة ويب بأسعار معقولة؟

Source:
https://adamtheautomator.com/nginx-subdomain/