دامنه سفارشی در گیت هاب پیجز (GitHub Pages Custom Domains) فرایندی است که در آن، آدرس پیش‌فرض username.github.io به یک دامنه‌ی اختصاصی منتقل می‌شود و امکان استفاده از HTTPS را نیز فراهم می‌کند. این تنظیم، بر پایه‌ی دو بخش اصلی بنا می‌شود: رکوردهای DNS (Domain Name System) و فایل CNAME در مخزن گیت. برای مهندسان و توسعه‌دهندگانی که می‌خواهند پروژه‌های شخصی، مستندات یا نمونه‌کارهای خود را روی دامنه‌ی اختصاصی منتشر کنند، تسلط بر این فرایند ضروری است. در این نوشتار، از مبانی DNS تا تنظیم دقیق رکوردها، فعال‌سازی HTTPS، رفع خطاهای رایج و نکات امنیتی و عملکردی، مسیر کامل را با نگاهی فنی و عملی ترسیم می‌کنم. تمرکز بر آن است که هم توسعه‌دهنده‌ی تازه‌کار بتواند مراحل را اجرا کند و هم مهندس ارشد، لایه‌های زیرین و محدودیت‌های ساختاری گیت هاب پیجز را درک نماید.

دامنه سفارشی روی گیت هاب پیجز، برای بسیاری از توسعه‌دهندگان، اولین تجربه‌ی جدی کار با DNS است. در نگاه اول ساده به‌نظر می‌رسد؛ اما جزئیات رکوردها، ترتیب انتشار، زمان پروپاگیشن و رفتار گیت هاب در مواجهه با دامنه‌های متفاوت، می‌تواند به پیچیدگی‌هایی منجر شود که ساعت‌ها وقت بگیرد. در این نوشتار، این مسیر را گام‌به‌گام و با تمرکز بر ریشه‌ی رفتارها طی می‌کنیم.

گیت هاب پیجز چیست؟

گیت هاب پیجز (GitHub Pages) سرویس میزبانی استاتیک گیت هاب است که به کاربران امکان می‌دهد محتوای HTML، CSS و JavaScript خود را مستقیماً از یک مخزن گیت منتشر کنند. این سرویس برای پروژه‌های شخصی، مستندات، وبلاگ‌های استاتیک و نمونه‌کارها بسیار مناسب است. اگر با مفهوم مخزن و شاخه در گیت آشنا نیستید، مطالعه‌ی دستورات ضروری Git نقطه‌ی شروع مفیدی است.

گیت هاب پیجز در دو سطح ارائه می‌شود:

  • User/Organization Pages: به شکل username.github.io و از مخزن username.github.io.
  • Project Pages: به شکل username.github.io/repo-name و از هر مخزنی.

هر دو سطح، امکان اتصال دامنه‌ی سفارشی را دارند، اما جزئیات تنظیم در آن‌ها تفاوت دارد.

مبانی DNS و انواع رکورد

پیش از ورود به تنظیمات، لازم است با رکوردهای اصلی DNS آشنا شوید:

نوع رکوردکاربردمقدار در گیت هاب پیجز
Aنگاشت دامنه به آدرس IPv4185.199.108.153 و سایر IPهای گیت هاب
AAAAنگاشت دامنه به آدرس IPv62606:50c0:8000::153 و مشابه
CNAMEنگاشت نام به نام دیگرusername.github.io
TXTتأیید مالکیت دامنهرشته‌ای که گیت هاب ارائه می‌دهد

درک تفاوت این رکوردها، پایه‌ی هر تنظیم درست است. اگر با مفهوم کلی DNS آشنایی ندارید، مطالعه‌ی DNS و نحوه کار آن کمک‌کننده است. همچنین برای پیوندهای تکمیلی در مورد رکورد CNAME، مطالعه‌ی CNAME و زمان استفاده مفید است.

تفاوت دامنه اصلی و زیردامنه

گیت هاب پیجز در مواجهه با دامنه‌ی اصلی (Apex) و زیردامنه (Subdomain) رفتار متفاوتی دارد:

  • دامنه اصلی مانند example.com: باید با رکوردهای A و AAAA به آدرس‌های گیت هاب نگاشت شود. زیرا در سطح دامنه اصلی، امکان استفاده از رکورد CNAME وجود ندارد.
  • زیردامنه مانند blog.example.com: با رکورد CNAME به username.github.io نگاشت می‌شود.

این تفاوت، منبع بسیاری از خطاهای رایج است. اگر رکورد CNAME را روی دامنه‌ی اصلی تنظیم کنید، معمولاً یا نامعتبر است یا با سایر رکوردها تداخل می‌کند.

قاعده‌ی ساده: دامنه اصلی، A و AAAA؛ زیردامنه، CNAME.

فایل CNAME در مخزن

علاوه بر تنظیم رکوردهای DNS، گیت هاب نیازمند یک فایل متنی به نام CNAME در شاخه‌ی انتشار مخزن است که نام دامنه‌ی سفارشی در آن نوشته شده باشد. این فایل:

  • در ریشه‌ی شاخه‌ی انتشار قرار می‌گیرد (مثلاً main یا gh-pages).
  • فقط شامل یک خط است: نام دامنه بدون https:// و بدون اسلش پایانی.
  • نمونه: www.example.com یا example.com.

اگر این فایل نباشد، گیت هاب در هر انتشار، تنظیم دامنه را از دست می‌دهد. برای پروژه‌های وردپرسی که با Git مدیریت می‌شوند، این نکته اهمیت بیشتری دارد؛ چون ممکن است در فرایند استقرار، فایل CNAME حذف یا بازنویسی شود.

نمونه محتوای فایل CNAME

www.example.com

تنظیم رکوردهای DNS

گام اصلی، تنظیم رکوردهای DNS در پنل ارائه‌دهنده‌ی دامنه است. مراحل به‌طور خلاصه:

  1. ورود به پنل مدیریت DNS دامنه.
  2. حذف رکوردهای متضاد پیشین (اگر روی همان نام تنظیم شده‌اند).
  3. افزودن رکوردهای A برای دامنه اصلی به IPهای گیت هاب:
    • 185.199.108.153
    • 185.199.109.153
    • 185.199.110.153
    • 185.199.111.153
  4. افزودن رکوردهای AAAA برای پشتیبانی IPv6:
    • 2606:50c0:8000::153
    • 2606:50c0:8001::153
    • 2606:50c0:8002::153
    • 2606:50c0:8003::153
  5. برای زیردامنه www، رکورد CNAME به username.github.io اضافه کنید.
  6. در صورت نیاز، یک رکورد CNAME از دامنه اصلی به www بسازید (بسته به سیاست یکسان‌سازی).

پس از تنظیم، به دلایل فنی ممکن است رکوردها با تأخیر در سطح شبکه منتشر شوند. این تأخیر، معمولاً بین چند دقیقه تا چند ساعت است و به TTL رکوردها بستگی دارد. اگر با مفهوم TTL آشنا نیستید، مطالعه‌ی TTL و اثر آن بر کش راهنما است.

فعال‌سازی HTTPS

گیت هاب پیجز از طریق Let's Encrypt گواهی SSL رایگان برای دامنه سفارشی صادر می‌کند. مراحل:

  1. اطمینان از انتشار کامل رکوردهای DNS.
  2. ورود به تنظیمات مخزن و انتخاب بخش Pages.
  3. انتخاب دامنه سفارشی و فعال‌سازی گزینه‌ی Enforce HTTPS.
  4. انتظار برای صدور گواهی (معمولاً کمتر از یک ساعت).

نکته‌ی مهم: گیت هاب فقط برای دامنه‌هایی که DNS آن‌ها به‌درستی تنظیم شده باشد، گواهی صادر می‌کند. اگر HTTPS فعال نشد، ابتدا وضعیت DNS را بررسی کنید. برای درک اصولی HTTPS و تفاوت آن با HTTP، مطالعه‌ی HTTPS و تفاوت آن با HTTP مفید است.

HTTPS در گیت هاب پیجز، به شرطی فعال می‌شود که DNS از قبل به‌درستی تنظیم شده باشد.

تأیید و عیب‌یابی

پس از تنظیم، برای تأیید صحت پیکربندی:

  • از ابزار dig در خط فرمان برای بررسی رکوردها استفاده کنید: dig example.com A.
  • از سرویس‌های آنلاین بررسی DNS برای دیدن وضعیت انتشار استفاده کنید.
  • مرورگر را در حالت ناشناس باز کنید یا کش DNS سیستم را پاک کنید.
  • با استفاده از ابزار بررسی گواهی SSL، صحت نصب گواهی را بررسی کنید.

برای مطالعه‌ی بیشتر در مورد عیب‌یابی DNS، می‌توانید به راهنمای عیب‌یابی مشکلات DNS مراجعه کنید.

خطاهای رایج

سه خطای رایج که در تنظیم دامنه سفارشی گیت هاب پیجز دیده می‌شود:

  1. تداخل رکورد CNAME و A: وجود همزمان این دو روی یک نام، معمولاً منجر به رفتار غیرقابل پیش‌بینی می‌شود.
  2. نبود فایل CNAME در مخزن: گیت هاب در هر انتشار، دامنه سفارشی را از دست می‌دهد.
  3. تنظیم دامنه اصلی با CNAME: این کار معمولاً نامعتبر است و DNS را مختل می‌کند.

برای پرهیز از این خطاها، پیوسته وضعیت را با ابزارهای بررسی DNS کنترل کنید و از ابزارهای خودکار مدیریت DNS برای جلوگیری از تداخل استفاده نمایید.

نکات امنیتی

سه نکته‌ی امنیتی مهم در این حوزه:

  • فعال‌سازی Enforce HTTPS: برای جلوگیری از انتقال داده روی HTTP.
  • ثبت رکورد TXT تأیید مالکیت: گیت هاب برای برخی دامنه‌ها، تأیید مالکیت را الزامی می‌کند.
  • بررسی رکوردهای اضافی: رکوردهای ناشناخته در پنل DNS می‌توانند نشانه‌ی نفوذ باشند.

اگر در حال مدیریت مخزن روی گیت هاب هستید و از فرایندهای استقرار خودکار استفاده می‌کنید، مطالعه‌ی GitHub Actions می‌تواند مسیر امن‌سازی و خودکارسازی انتشار را روشن‌تر کند.

پرسش‌های پرتکرار

آیا گیت هاب پیجز از HTTPS روی دامنه سفارشی پشتیبانی می‌کند؟

بله، برای همه‌ی دامنه‌هایی که رکوردهای DNS آن‌ها به‌درستی تنظیم شده باشد، گواهی SSL رایگان صادر می‌شود.

چرا بعد از تنظیم، سایت همچنان به آدرس قدیمی می‌رود؟

به دلیل کش DNS. باید منتظر انتشار رکوردها یا پاک کردن کش محلی باشید.

تفاوت A و CNAME چیست؟

رکورد A دامنه را به آدرس IPv4 نگاشت می‌کند؛ رکورد CNAME نام را به نام دیگر. برای دامنه اصلی، A و برای زیردامنه، CNAME.

جمع‌بندی فنی

تنظیم دامنه سفارشی در گیت هاب پیجز، فرایندی است که با درک دقیق DNS، رکوردها و رفتار گیت هاب، به سادگی قابل اجراست. خطاهای رایج، معمولاً از بی‌توجهی به تفاوت دامنه اصلی و زیردامنه یا فراموش کردن فایل CNAME ناشی می‌شوند. با رعایت این اصول، پروژه‌های استاتیک روی گیت هاب پیجز می‌توانند با دامنه‌ی اختصاصی و HTTPS کامل منتشر شوند. اگر در پروژه‌های بزرگ‌تر با چالش‌هایی مانند مدیریت DNS در تیم‌ها مواجه شده‌اید، برای خوانندگان بعدی مفید است که بدانید کدام مرحله بیشترین سردرگمی را ایجاد کرده و چه راه‌حلی برای آن به کار برده‌اید.