إعداد DNS Wildcard
يتيح DNS Wildcard إنشاء نطاقات فرعية للمستأجرين مثل acme.yourdomain.com وtechcorp.yourdomain.com وغيرها. هذا الإعداد اختياري — يعمل FeedbackPulse بشكل طبيعي مع عناوين URL المستندة إلى الـ slug (مثل /wall/acme-corp) دون الحاجة إلى DNS Wildcard.
هل أحتاج إلى DNS Wildcard؟
| السيناريو | هل تحتاج DNS Wildcard؟ |
|---|---|
يستخدم المستأجرون صفحات عامة مستندة إلى الـ slug (/wall/acme-corp) | لا |
يريد المستأجرون نطاقًا فرعيًا خاصًا بهم (acme.yourdomain.com) | نعم |
يستخدم المستأجرون نطاقًا مخصصًا خاصًا بهم (feedback.acme.com) | لا (استخدم CNAME بدلاً من ذلك) |
ما تحتاجه
- سجل A لـ DNS Wildcard:
*.yourdomain.com→ عنوان IP الخادم - شهادة SSL Wildcard: تغطي
*.yourdomain.com - إعداد خادم الويب: لقبول جميع النطاقات الفرعية
الخطوة 1: إضافة سجل DNS
انتقل إلى لوحة إدارة DNS لدى مزود النطاق الخاص بك وأضف:
| النوع | الاسم/المضيف | القيمة | TTL |
|---|---|---|---|
| A | * | 123.456.789.0 (عنوان IP الخادم) | 300 |
تحتاج أيضًا إلى سجل A العادي للنطاق الرئيسي:
النوع الاسم/المضيف القيمة A @123.456.789.0
تعليمات خاصة بكل مزود
Cloudflare
- سجّل الدخول إلى لوحة تحكم Cloudflare
- اختر نطاقك
- انتقل إلى DNS → Records
- انقر Add Record
- النوع:
A| الاسم:*| IPv4: عنوان IP الخادم | البروكسي: DNS only (السحابة الرمادية) - انقر Save
مهم: بالنسبة للنطاقات الفرعية Wildcard، اضبط بروكسي Cloudflare على DNS only (السحابة الرمادية) وليس Proxied (السحابة البرتقالية). لا يدعم الخطة المجانية من Cloudflare توجيه النطاقات الفرعية Wildcard.
Namecheap
- سجّل الدخول → Domain List → Manage لنطاقك
- انتقل إلى Advanced DNS
- انقر Add New Record
- النوع:
A Record| المضيف:*| القيمة: عنوان IP الخادم | TTL: Automatic - احفظ
GoDaddy
- سجّل ا لدخول → My Products → DNS لنطاقك
- انقر Add Record
- النوع:
A| الاسم:*| القيمة: عنوان IP الخادم | TTL: 600 - احفظ
Google Domains / Google Cloud DNS
- انتقل إلى Google Domains
- اختر نطاقك → DNS
- تحت Custom Records، أضف:
- المضيف:
*| النوع:A| البيانات: عنوان IP الخادم - احفظ
AWS Route 53
- انتقل إلى Route 53 → Hosted Zones → اختر نطاقك
- انقر Create Record
- اسم السجل:
*| نوع السجل:A - القيمة: عنوان IP الخادم | TTL:
300 - انقر Create Records
DigitalOcean DNS
- انتقل إلى Networking → Domains
- اختر نطاقك
- أضف: النوع
A| اسم المضيف*| الوجهة: عنوان IP الخادم | TTL:300
Hetzner DNS
- انتقل إلى Hetzner DNS Console
- اختر منطقتك
- أضف سجلاً: النوع
A| الاسم*| القيمة: عنوان IP الخادم
الخطوة 2: الحصول على شهادة SSL Wildcard
الخيار أ: Let's Encrypt مع تحدي DNS (مجاني)
تتطلب شهادات Wildcard من Let's Encrypt تحدي DNS-01 (وليس HTTP):
# تثبيت Certbot مع إضافة DNS لمزودك
# مثال: Cloudflare
sudo apt install certbot python3-certbot-dns-cloudflare
# إنشاء ملف بيانات اعتماد Cloudflare
sudo mkdir -p /etc/letsencrypt
sudo nano /etc/letsencrypt/cloudflare.ini
أضف رمز API الخاص بـ Cloudflare:
dns_cloudflare_api_token = your_cloudflare_api_token_here
sudo chmod 600 /etc/letsencrypt/cloudflare.ini
# الحصول على شهادة Wildcard
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
-d yourdomain.com \
-d "*.yourdomain.com"
إضافات DNS لمزودين آخرين
| المزود | إضافة Certbot | التثبيت |
|---|---|---|
| Cloudflare | python3-certbot-dns-cloudflare | sudo apt install python3-certbot-dns-cloudflare |
| Route 53 | python3-certbot-dns-route53 | sudo apt install python3-certbot-dns-route53 |
| DigitalOcean | python3-certbot-dns-digitalocean | sudo apt install python3-certbot-dns-digitalocean |
| Google Cloud | python3-certbot-dns-google | sudo apt install python3-certbot-dns-google |
الخيار ب: تحدي DNS اليدوي
إذا لم يكن لمزود DNS الخاص بك إضافة Certbot:
sudo certbot certonly --manual --preferred-challenges dns \
-d yourdomain.com -d "*.yourdomain.com"
سيطلب منك Certbot إنشاء سجل TXT. اتبع التعليمات الظاهرة.
تنبيه التحدي اليدوي: ستحتاج إلى التجديد يدويًا كل 90 يومًا وتحديث سجل DNS TXT في كل مرة.
الخيار ج: شهادة Wildcard مدفوعة
اشترِ من مزودين مثل:
- Comodo/Sectigo (~70 دولار/سنة)
- DigiCert (~400 دولار/سنة)
- RapidSSL (~125 دولار/سنة)
الخطوة 3: إعداد خادم الويب
راجع أقسام Wildcard في:
- إعداد Apache — ابحث عن قسم "Wildcard Subdomain Support"
- إعداد Nginx — ابحث عن قسم "Wildcard Subdomain Support"
المفتاح: استخدم ServerAlias *.yourdomain.com (في Apache) أو server_name yourdomain.com *.yourdomain.com; (في Nginx).
الخطوة 4: التحقق من عمل الإعداد
# اختبار حل DNS لنطاق فرعي
dig test.yourdomain.com
# يجب أن يُرجع عنوان IP الخادم في قسم ANSWER
# الاختبار باستخدام curl
curl -I https://anything.yourdomain.com
# يجب أن يُرجع 200 أو إعادة توجيه (وليس "could not resolve host")
الخطوة 5: إعداد FeedbackPulse
حدّث ملف .env الخاص بك:
# تعيين نطاق الجلسة للسماح بالكوكيز عبر النطاقات الفرعية
SESSION_DOMAIN=.yourdomain.com
# عنوان URL الرئيسي للتطبيق (بدون نطاق فرعي)
APP_URL=https://yourdomain.com
لاحظ النقطة البادئة في
SESSION_DOMAIN=.yourdomain.com— تتيح هذه النقطة عمل كوكيز الجلسة عبر جميع النطاقات الفرعية.
كيف تعمل النطاقات الفرعية في FeedbackPulse
عند وصول طلب إلى acme.yourdomain.com:
- يستخرج الـ middleware الخاص بـ
ResolveTenantالنطاق الفرعي (acme) - يبحث عن المستأجر بـ
subdomain = 'acme' - إذا وُجد، يُعيَّن المستأجر بوصفه السياق الحالي
- يرى المستخدم صفحة تسجيل الدخول أو لوحة التحكم الخاصة بالمستأجر
يحدد المستأجرون نطاقهم الفرعي أثناء التسجيل. يمكنك أيضًا تعيينه يدويًا من لوحة الإدارة.
الخطوات التالية
- شهادات SSL — مزيد من تفاصيل إعداد SSL
- النطاقات المخصصة — السماح للمستأجرين باستخدام نطاقاتهم الخاصة