طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 132 · تقنيات تطوير الواجهات الخلفية
الدرس 26 · الوحدة 13: تكوين النطاق وإمكانية الوصول عبر الويب

النطاق وDNS وHTTPS

اسم سهل لتطبيقك، واتصال مشفّر يثق به المتصفح. ⏱ نحو 30 دقيقة.

بعد هذا الدرس ستستطيع أن:
  • تشرح أجزاء اسم النطاق ودور مسجّل النطاقات.
  • تشرح عمل DNS وسجلاته A و CNAME و MX و TXT و NS، ومعنى TTL.
  • تربط نطاقًا بالاستضافة بخوادم الأسماء أو بسجل A.
  • تفعّل HTTPS وتحوّل إليه، وترسل HSTS، وتراعي الوكيل X-Forwarded-Proto.

١اسم النطاق

كل خادم على الإنترنت له عنوان رقمي IP مثل 203.0.113.25. ولأن الأرقام صعبة الحفظ، نستخدم اسم النطاق Domain name مثل tatbeeqha.sa. والنطاق يُقرأ من اليمين إلى اليسار بالمعنى:

الجزءمثالمعناه
النطاق العلوي TLD.sa ، .com ، .edu.saالدولة أو النوع. نطاقات .sa يديرها المركز السعودي لمعلومات الشبكة (SaudiNIC).
النطاق الذي تسجّلهtatbeeqhaتشتريه من مسجّل نطاقات لمدة سنة أو أكثر وتجدّده.
النطاق الفرعيapi. ، www.تنشئه أنت مجانًا: api.tatbeeqha.sa لخدمة مستقلة مثلًا.

واستضافات كثيرة تعطيك نطاقًا فرعيًّا مجانيًّا من نطاقها، مناسبًا للتجربة. أما المشروع الحقيقي فيستحق نطاقًا خاصًّا يعكس هويته.

٢DNS: دليل هاتف الإنترنت

حين تكتب tatbeeqha.sa يسأل جهازك نظام DNS (نظام أسماء النطاقات): «ما عنوان IP لهذا الاسم؟» ثم يتصل بالعنوان. ولكل نطاق «سجلات» تحدد إلى أين تذهب كل خدمة:

السجلوظيفتهمثال
Aالاسم ← عنوان IPv4tatbeeqha.sa → 203.0.113.25
AAAAالاسم ← عنوان IPv6tatbeeqha.sa → 2001:db8::25
CNAMEالاسم ← اسم آخرwww.tatbeeqha.sa → tatbeeqha.sa
MXخادم البريد للنطاقtatbeeqha.sa → mail.provider.com
TXTنص للتحقق والإعداداتإثبات ملكية النطاق لخدمة ما
NSمن يدير سجلات هذا النطاقns1.host.com

ولكل سجل TTL: كم ثانية تحفظ الأجهزة الجواب قبل أن تسأل من جديد. لذلك حين تغيّر سجلًّا قد يستغرق ظهور التغيير لكل الناس من دقائق إلى ساعات، وهذا ما يسمى «انتشار DNS».

٣ربط النطاق بالاستضافة

طريقتان، وتختار إحداهما من لوحة مسجّل النطاق:

الطريقةماذا تفعل؟متى؟
تغيير خوادم الأسماء NSتكتب خوادم أسماء شركة الاستضافة، فتصير هي من يدير كل سجلاتك.الأسهل: الاستضافة تضبط كل شيء.
سجل A (و CNAME لـ www)تبقي إدارة DNS عند المسجّل، وتوجّه الاسم إلى IP الخادم.حين تريد التحكم بالسجلات بنفسك.

وفي لوحة الاستضافة تضيف النطاق إلى موقعك (Addon domain)، ليعرف الخادم أن طلبات هذا الاسم تخص مجلد موقعك. ولتتحقق من DNS من سطر الأوامر في Windows:

C:\> nslookup tatbeeqha.saName:    tatbeeqha.saAddress: 203.0.113.25

٤HTTPS: التشفير والثقة

بدون HTTPS تمر كلمات المرور وكوكي الجلسة نصًّا واضحًا يقرؤه أي أحد على شبكة الـ Wi-Fi نفسها. وHTTPS يشفّر الاتصال، ويثبت للمتصفح أن الخادم هو صاحب النطاق فعلًا، عبر شهادة SSL/TLS تصدرها جهة موثوقة.

التحويل إلى HTTPS في Apache بملف .htaccess:

RewriteEngine OnRewriteCond %{HTTPS} offRewriteCond %{HTTP:X-Forwarded-Proto} !httpsRewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

والسطر الثالث مهم: كثير من الاستضافات تضع أمام خادمك «وكيلًا» Proxy يستقبل HTTPS ثم يكلّم خادمك بـ HTTP، ويخبره عبر الترويسة X-Forwarded-Proto: https. بدونه قد يدخل الموقع في حلقة تحويل لا تنتهي.

٥التحويل في PHP، و HSTS

إن لم تستطع استخدام .htaccess فالمنطق نفسه في PHP، في ملف البدء. ومعه ترويسة HSTS التي تقول للمتصفح: «لا تكلمني إلا بـ HTTPS طوال المدة القادمة»:

<?phpfunction is_https(): bool{    return ($_SERVER['HTTPS'] ?? '') === 'on'        || ($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? '') === 'https';} if (!is_https()) {    header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], true, 301);    exit;}header('Strict-Transport-Security: max-age=31536000');   // سنةecho 'اتصال آمن ✓';

الطلب الأول وصل عبر http فحُوّل بـ 301 إلى نسخة https من الرابط نفسه. والثاني جاء من الوكيل بعلامة https فخدمناه وأرسلنا HSTS.

توقّع وتحقّق

السجل الذي يربط الاسم بعنوان IPv4:

Address.

السجل الذي يجعل www اسمًا بديلًا للنطاق الأساسي:

Canonical name.

TTL في DNS يعني:

Time To Live.

رمز التحويل الدائم من http إلى https:

Moved Permanently.

الخلاصة

تحدٍّ برمجي: أجبر HTTPS

متوسط

اكتب secure.php ليعمل التطبيق المنشور على HTTPS فقط، خلف وكيل الاستضافة.

المطلوب:
  • الاتصال آمن إن كان $_SERVER['HTTPS'] يساوي on، أو كانت الترويسة X-Forwarded-Proto تساوي https.
  • غير الآمن ← 301 إلى https:// + المضيف + المسار كاملًا مع سلسلة الاستعلام، ولا يُرسل أي محتوى.
  • الآمن ← الترويسة Strict-Transport-Security: max-age=31536000، وكوكي الجلسة بخصائص Secure و HttpOnly و SameSite=Lax، ثم «مرحبًا».
👀 اعرض الاستجابة المطلوبة
✓ التحقق الآلي: يرسل المختبر هذه الطلبات إلى خادمك بالترتيب ثم يفحص الاستجابات
  1. GET /secure.php?x=1&y=2
  2. GET /secure.php
  • الكود يعمل بلا أخطاء أو تحذيرات
  • http ← 301
  • التحويل إلى https://app.tvtc-demo.sa/secure.php?x=1&y=2
  • لا محتوى مع التحويل
  • https ← HSTS سنة
  • كوكي الجلسة Secure
  • كوكي الجلسة HttpOnly
  • كوكي الجلسة SameSite=Lax
  • https ← مرحبًا

💡 تلميح 1
المسار مع الاستعلام في $_SERVER['REQUEST_URI']، والمضيف في $_SERVER['HTTP_HOST'].
💡 تلميح 2
session_set_cookie_params قبل session_start (الدرس 8).

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

<?php$secure = ($_SERVER['HTTPS'] ?? '') === 'on' || ($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? '') === 'https';if (!$secure) {    header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], true, 301);    exit;}header('Strict-Transport-Security: max-age=31536000');session_set_cookie_params(['secure' => true, 'httponly' => true, 'samesite' => 'Lax']);session_start();echo 'مرحبًا';
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس