النطاق و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 | الاسم ← عنوان IPv4 | tatbeeqha.sa → 203.0.113.25 |
AAAA | الاسم ← عنوان IPv6 | tatbeeqha.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 تصدرها جهة موثوقة.
- أغلب الاستضافات اليوم تصدر شهادة مجانية تلقائيًّا (غالبًا من
Let's Encrypt)؛ ابحث في اللوحة عنSSL/TLS. - الشهادة لها تاريخ انتهاء، والتجديد التلقائي يجب أن يكون مفعّلًا.
- بعد تفعيلها: حوّل كل طلبات
httpإلىhttps، وفعّلcookie_secureللجلسة. - المتصفحات تعرض «غير آمن» بجانب المواقع بلا
HTTPS، وتحجب بعض الميزات (مثل الموقع الجغرافي والكاميرا).
التحويل إلى 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.الخلاصة
- النطاق اسم مقروء لعنوان
IP؛ يُسجَّل من مسجّل، والفرعي تنشئه أنت. DNSيترجم الاسم:A←IP، وCNAME← اسم آخر، وMXللبريد، وNSلمن يدير السجلات.- التغييرات تنتشر بعد انتهاء
TTL. HTTPS= تشفير + إثبات هوية بشهادة (غالبًاLet's Encryptمجانًا).- حوّل
httpبـ 301، وأرسلHSTS، واقرأX-Forwarded-Protoخلف الوكيل.
تحدٍّ برمجي: أجبر HTTPS
متوسطاكتب secure.php ليعمل التطبيق المنشور على HTTPS فقط، خلف وكيل الاستضافة.
- الاتصال آمن إن كان
$_SERVER['HTTPS']يساوي on، أو كانت الترويسةX-Forwarded-Protoتساوي https. - غير الآمن ← 301 إلى
https://+ المضيف + المسار كاملًا مع سلسلة الاستعلام، ولا يُرسل أي محتوى. - الآمن ← الترويسة
Strict-Transport-Security: max-age=31536000، وكوكي الجلسة بخصائص Secure و HttpOnly وSameSite=Lax، ثم «مرحبًا».
👀 اعرض الاستجابة المطلوبة
GET /secure.php?x=1&y=2GET /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
حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
<?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 'مرحبًا';