آموزش CDN و سرعت سایت

افزایش سرعت سایت وردپرس با CDN؛ راهنمای کامل تنظیمات کش

تهیه: کلودیفای (نگارش با کمک هوش مصنوعی) · انتشار: · زمان مطالعه: ۷ دقیقه

browseredgeoriginHITCDNآموزش CDN و سرعت سایتافزایش سرعت سایتوردپرس با CDN؛ راهنمایکامل تنظیمات کشمجلهٔ کلودیفایclodify.net/blog
پاسخ کوتاه

برای اتصال وردپرس به CDN، رکورد DNS دامنه را به CDN بسپارید، حالت SSL را روی Full یا Full Strict بگذارید و آی‌پی واقعی بازدیدکننده را در وب‌سرور بازیابی کنید. فایل‌های ثابت (تصاویر، CSS، JS، فونت) را با مدت طولانی کش کنید، اما بخش مدیریت، صفحهٔ ورود، سبد خرید، پرداخت و کاربران واردشده را هرگز کش نکنید. پس از هر تغییر طراحی، کش CDN را پاک کنید.

CDN چه کمکی به وردپرس می‌کند؟

وردپرس برای هر صفحه، کد PHP اجرا می‌کند، چند کوئری به دیتابیس می‌زند و سپس HTML را می‌سازد. علاوه بر آن، هر صفحه ده‌ها فایل ثابت مثل تصاویر، فایل‌های CSS، جاوااسکریپت و فونت دارد. اگر همهٔ این درخواست‌ها مستقیم به سرور شما برسند، هم سرعت کاهش می‌یابد و هم مصرف منابع و ترافیک سرور بالا می‌رود.

یک CDN (شبکهٔ توزیع محتوا) بین بازدیدکننده و سرور قرار می‌گیرد. فایل‌های ثابت را یک بار از سرور می‌گیرد، در نودهای خود نگه می‌دارد و دفعات بعد مستقیم به کاربر تحویل می‌دهد. نتیجه: بار سرور کم می‌شود، ترافیک خروجی سرور اصلی پایین می‌آید و کاربران فایل‌ها را از نقطهٔ نزدیک‌تری دریافت می‌کنند. اگر با مفهوم CDN آشنا نیستید، ابتدا CDN چیست؟ را بخوانید.

وردپرس پشت CDN
درخواست صفحهفقط در صورت MISSکوئری‌هابازدیدکنندهمرورگرنود CDNکش فایل‌های ثابتوب‌سرورNginx و PHP-FPMدیتابیسMySQL یا MariaDBدرخواست صفحهفقط در صورت MISSکوئری‌هابازدیدکنندهمرورگرنود CDNکش فایل‌های ثابتوب‌سرورNginx و PHP-FPMدیتابیسMySQL یا MariaDB
شکل ۱ فایل‌های ثابت از کش CDN تحویل می‌شوند و فقط درخواست‌های پویا به سرور و دیتابیس می‌رسند.

قدم اول: اتصال دامنه به CDN

دو روش رایج برای اتصال دامنه وجود دارد:

  1. تغییر نیم‌سرورها (NS): مدیریت کامل DNS دامنه به CDN منتقل می‌شود. ساده است اما همهٔ رکوردها باید در پنل CDN بازسازی شوند.
  2. رکورد CNAME: فقط زیردامنهٔ موردنظر (مثلاً www) با یک رکورد CNAME به آدرسی که CDN می‌دهد اشاره می‌کند و بقیهٔ DNS نزد سرویس فعلی می‌ماند. راهنمای کامل در تنظیم CNAME برای CDN آمده است.

پیش از تغییر، از همهٔ رکوردهای DNS فعلی یادداشت بردارید؛ به‌ویژه رکوردهای ایمیل (MX، SPF). فراموش کردن این رکوردها رایج‌ترین علت قطعی ایمیل پس از اتصال CDN است. پس از تغییر، انتشار رکوردها ممکن است مدتی طول بکشد؛ در انتشار DNS دلیل آن توضیح داده شده است.

قدم دوم: تنظیم درست SSL

وقتی CDN بین کاربر و سرور قرار می‌گیرد، دو اتصال جداگانه داریم: کاربر تا CDN و CDN تا سرور. حالت SSL در پنل CDN تعیین می‌کند اتصال دوم چطور برقرار شود.

  • Flexible: CDN با HTTP ساده به سرور وصل می‌شود. برای وردپرس خطرناک است و معمولاً به خطای «Too many redirects» منجر می‌شود، چون وردپرس یا افزونهٔ SSL مدام کاربر را به HTTPS هدایت می‌کند.
  • Full: CDN با HTTPS به سرور وصل می‌شود، حتی با گواهی خودامضا.
  • Full (Strict): مثل Full اما گواهی سرور باید معتبر باشد. امن‌ترین گزینه است.

پیشنهاد ما: روی سرور گواهی Let's Encrypt نصب کنید (آموزش Nginx و Let's Encrypt) و حالت Full (Strict) را انتخاب کنید. مقایسهٔ کامل حالت‌ها در حالت‌های SSL در CDN آمده است.

قدم سوم: آی‌پی واقعی بازدیدکننده

پس از اتصال CDN، همهٔ درخواست‌ها از آی‌پی نودهای CDN به سرور می‌رسند. اگر کاری نکنید، وردپرس، افزونه‌های امنیتی و آمار سایت همه آی‌پی CDN را می‌بینند. نتیجه: افزونهٔ امنیتی ممکن است آی‌پی CDN را مسدود کند و کل سایت از دسترس خارج شود. راه‌حل، تنظیم وب‌سرور برای خواندن آی‌پی واقعی از هدر ارسالی CDN است. در Nginx این کار با ماژول real_ip انجام می‌شود:

set_real_ip_from 203.0.113.0/24;   # range of CDN nodes
real_ip_header X-Forwarded-For;
real_ip_recursive on;

فهرست دقیق رنج آی‌پی‌ها را از مستندات CDN بگیرید. توضیح کامل در آی‌پی واقعی کاربر پشت CDN آمده است.

چه چیزی کش شود و چه چیزی نه
کش طولانی
  • تصاویر wp-content/uploads
  • CSS و JS قالب و افزونه‌ها
  • فونت‌ها و SVG
  • صفحات عمومی برای مهمانان (با احتیاط)
در برابر
هرگز کش نشود
  • wp-admin و wp-login.php
  • سبد خرید، پرداخت و حساب کاربری
  • درخواست‌های دارای کوکی ورود
  • wp-cron.php و xmlrpc.php
شکل ۲ قوانین کش غلط می‌تواند اطلاعات یک کاربر را به دیگری نشان دهد؛ استثناها را دقیق تنظیم کنید.

قدم چهارم: قوانین کش برای وردپرس

مهم‌ترین بخش کار همین‌جاست. قوانین زیر برای بیشتر سایت‌های وردپرسی مناسب است:

فایل‌های ثابت: کش طولانی

فایل‌های داخل /wp-content/uploads/، /wp-content/themes/ و /wp-includes/ با پسوندهایی مثل jpg، png، webp، css، js، woff2 و svg را برای مدت طولانی (مثلاً یک ماه) در CDN و مرورگر کش کنید. وردپرس معمولاً به آدرس فایل‌های CSS و JS پارامتر نسخه (?ver=) اضافه می‌کند؛ پس با به‌روزرسانی قالب، آدرس عوض می‌شود و کش قدیمی مشکلی ایجاد نمی‌کند.

مسیرهایی که هرگز نباید کش شوند

  • /wp-admin/ و /wp-login.php
  • /wp-json/ (مگر این‌که بدانید چه می‌کنید)
  • /cart/، /checkout/ و /my-account/ در ووکامرس
  • هر درخواستی که کوکی‌های wordpress_logged_in_ یا woocommerce_items_in_cart دارد
  • xmlrpc.php و wp-cron.php

کش شدن این مسیرها می‌تواند فاجعه‌بار باشد؛ مثلاً صفحهٔ حساب یک کاربر به کاربر دیگری نمایش داده شود.

صفحات HTML

کش کردن HTML بیشترین بهبود سرعت را دارد، اما فقط برای بازدیدکنندگان مهمان. اگر CDN شما امکان «عبور از کش در صورت وجود کوکی» دارد، صفحات را برای مدت کوتاه کش کنید و برای کاربران واردشده کش را دور بزنید. اگر این امکان را ندارید، HTML را کش نکنید و از افزونهٔ کش صفحه روی خود سرور استفاده کنید. جزئیات هدرها در قوانین Cache-Control در CDN آمده است.

قدم پنجم: پاک‌سازی کش

پس از تغییر طراحی، به‌روزرسانی افزونه‌ها یا انتشار مطلب مهم، ممکن است کاربران نسخهٔ قدیمی را ببینند. کش را از پنل CDN پاک کنید؛ برای یک صفحه یا فایل خاص، پاک‌سازی تکی کافی است و نیازی به پاک کردن کل کش نیست. روش‌ها در پاک‌سازی کش CDN توضیح داده شده است.

افزونه‌های کش و CDN: هم‌زمان یا جدا؟

استفادهٔ هم‌زمان از افزونهٔ کش صفحه (مثل افزونه‌هایی که HTML آماده را روی دیسک ذخیره می‌کنند) و CDN کاملاً رایج و مفید است. افزونه بار PHP و دیتابیس را کم می‌کند و CDN فاصله و ترافیک را. فقط دقت کنید که قابلیت «CDN» داخل افزونه، که آدرس فایل‌ها را به دامنهٔ دیگری بازنویسی می‌کند، برای CDNهایی که روی خود دامنه فعال می‌شوند لازم نیست و گاهی مشکل ایجاد می‌کند.

همچنین بهینه‌سازی‌های سمت سرور را فراموش نکنید: فشرده‌سازی Gzip یا Brotli (آموزش)، OPcache برای PHP و Redis برای کش اشیا.

راه‌اندازی در پنج قدم
  1. اتصال دامنه

    با NS یا CNAME؛ رکوردهای ایمیل را فراموش نکنید.

  2. SSL روی Full Strict

    گواهی معتبر روی سرور و حالت امن در CDN.

  3. آی‌پی واقعی

    تنظیم real_ip در Nginx برای افزونه‌های امنیتی و آمار.

  4. قوانین کش

    فایل‌های ثابت طولانی، مسیرهای حساس بدون کش.

  5. آزمایش و پاک‌سازی

    بررسی HIT و MISS و پاک‌سازی پس از تغییرات.

شکل ۳ ترتیب درست این قدم‌ها از بیشتر خطاهای رایج پس از اتصال CDN جلوگیری می‌کند.

رفع خطاهای رایج

  • Too many redirects: حالت SSL را از Flexible به Full تغییر دهید و آدرس سایت در تنظیمات وردپرس با https شروع شود.
  • خطای 5xx پس از اتصال: CDN به سرور اصلی دسترسی ندارد یا سرور کند پاسخ می‌دهد. مقالهٔ خطاهای 5xx در CDN را ببینید.
  • تغییرات دیده نمی‌شود: کش CDN و افزونهٔ کش را پاک کنید و با پنجرهٔ ناشناس مرورگر بررسی کنید.
  • ورود به مدیریت ممکن نیست یا مدام خارج می‌شوید: مسیرهای مدیریت کش شده‌اند؛ قانون استثنای /wp-admin و /wp-login.php را بررسی کنید.
  • سایت پس از اتصال CDN باز نمی‌شود: مقالهٔ سایت پس از CDN بالا نمی‌آید را دنبال کنید.

چطور بهبود را بسنجیم؟

پیش و پس از اتصال CDN، با ابزارهای مرورگر (تب Network) زمان بارگذاری را مقایسه کنید. در پاسخ فایل‌های ثابت، هدرهایی مثل X-Cache یا CF-Cache-Status نشان می‌دهند که فایل از کش آمده (HIT) یا از سرور (MISS). اگر بیشتر فایل‌های ثابت پس از بارگذاری دوم هنوز MISS هستند، قوانین کش درست اعمال نشده‌اند.

در CDN کلودیفای هزینه به‌اندازهٔ مصرف و بر اساس هر گیگابایت ترافیک محاسبه می‌شود؛ تعرفهٔ فعلی هر گیگابایت ۱٬۰۰۰ است.

اگر وردپرس شما هنوز روی هاست اشتراکی است و می‌خواهید هم‌زمان به سرور مجازی منتقل شوید، چک‌لیست انتقال سایت به سرور مجازی ترتیب درست کارها را توضیح می‌دهد.

سؤالات متداول

آیا CDN برای سایت وردپرسی کوچک هم لازم است؟

برای سایت‌های کوچک با بازدید کم، CDN اجباری نیست اما همچنان سرعت تحویل تصاویر را بهتر و بار سرور را کمتر می‌کند. برای سایت‌های پربازدید و فروشگاه‌ها تقریباً ضروری است.

آیا می‌توانم صفحات ووکامرس را کش کنم؟

صفحات محصول و دسته‌بندی برای مهمانان قابل کش‌اند، اما سبد خرید، پرداخت، حساب کاربری و هر درخواستی با کوکی سبد خرید نباید کش شود.

چرا بعد از فعال کردن CDN افزونهٔ امنیتی همه را مسدود می‌کند؟

چون افزونه آی‌پی نودهای CDN را به‌جای آی‌پی واقعی بازدیدکننده می‌بیند. ماژول real_ip را در وب‌سرور تنظیم کنید تا آی‌پی واقعی از هدر CDN خوانده شود.

بعد از به‌روزرسانی قالب، سایت به‌هم‌ریخته نمایش داده می‌شود؛ چه کنم؟

احتمالاً فایل‌های CSS قدیمی در کش مانده‌اند. کش CDN و افزونهٔ کش را پاک کنید و مرورگر را با Ctrl+Shift+R بارگذاری کنید.

آماده‌اید؟ سرورتان را بسازید.

از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی

سرورتان را همین حالا بسازید.

ساعتی بپردازید. هر وقت خواستید حذف کنید.