CDN برای وردپرسکش وردپرسSSL وردپرسووکامرسCDN ایران

CDN برای وردپرس در ایران؛ تنظیم کش، پیشخوان و SSL کامل

۹ دقیقه مطالعهنویسنده: تحریریه ابر ویرا

راهنمای عملی تنظیم CDN برای وردپرس: جدا کردن مسیرهای ایستا و پویا، قانون‌های دورزدن کش برای پیشخوان، ووکامرس و کاربران واردشده، و رفتن به حالت SSL کامل با فرمان‌های WP-CLI. هزینه‌ی دانلود و سرور آزمایشی هم با نرخ‌های پنل حساب شده است.

CDN برای وردپرس در ایران؛ تنظیم کش، پیشخوان و SSL کامل

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

CDN برای وردپرس: مرز درخواست‌های ایستا و پویا

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

پرونده‌های ایستا؛ کش طولانی بی‌دردسر

هرچه زیر wp-content/uploads، wp-content/themes، wp-content/plugins و wp-includes است (تصویر، CSS، JS، فونت) برای همه‌ی بازدیدکننده‌ها یکسان است و می‌تواند مدت طولانی در لبه بماند. وردپرس به نشانی CSS و JS رشته‌ی ?ver= می‌افزاید و با به‌روزرسانی قالب یا افزونه همین عدد عوض می‌شود. پس کلید کش باید رشته‌ی پرس‌وجو را در نظر بگیرد؛ وگرنه پس از به‌روزرسانی، لبه همان نسخه‌ی قدیمی را تحویل می‌دهد.

HTML؛ پویا حتی وقتی ایستا به نظر می‌رسد

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

  • HTML را در لبه کش نکنید و کش صفحه را به افزونه‌ی کش روی مبدأ بسپارید که کاربر واردشده را می‌شناسد. ساده‌ترین و کم‌خطرترین راه همین است.
  • HTML را با مدت کوتاه کش کنید تنها اگر قانون‌های مسیر بتوانند بر پایه‌ی کوکی، درخواست را از کش بیرون ببرند.

جدول زیر رفتار پیشنهادی برای هر مسیر است:

مسیرمحتوارفتار پیشنهادی در لبه
/wp-content/uploads/*تصویر و رسانهکش طولانی
/wp-content/themes/*، /wp-content/plugins/*، /wp-includes/*CSS، JS، فونتکش طولانی، رشته‌ی پرس‌وجو در کلید کش
/wp-admin/*پیشخوان و admin-ajax.phpدورزدن کش
/wp-login.phpوروددورزدن کش و محدودسازی با دیوار آتش وب
/wp-json/*REST APIدورزدن کش
?s= و ?preview=trueجست‌وجو و پیش‌نمایشدورزدن کش
سبد، تسویه، حساب کاربری ووکامرسصفحه‌های شخصیدورزدن کش
/xmlrpc.phpXML-RPCمسدود، اگر اپلیکیشن یا سرویسی به آن نیاز ندارد
نوشته‌ها و برگه‌هاHTMLکش نشود، یا کش کوتاه با دورزدن بر پایه‌ی کوکی

نامک صفحه‌های سبد و تسویه در ووکامرس قابل تغییر است؛ پیش از نوشتن قانون، نشانی واقعی آن‌ها را از تنظیمات ووکامرس بردارید.

دورزدن کش برای پیشخوان و کاربران واردشده

گام‌به‌گام در قوانین مسیر

  1. برای /wp-admin/* قانون دورزدن کش بسازید. دقت کنید admin-ajax.php در همین مسیر است و بسیاری از فرم‌ها و افزونه‌ها برای بازدیدکننده‌ی عادی هم از آن استفاده می‌کنند؛ این مسیر باید از کش بیرون باشد، نه مسدود.
  2. همین قانون را برای /wp-login.php و /wp-json/* تکرار کنید.
  3. صفحه‌های سبد، تسویه و حساب کاربری ووکامرس را با نامک واقعی‌شان اضافه کنید.
  4. اگر قانون‌ها شرط کوکی را می‌پذیرند، درخواست‌هایی را که یکی از این پیشوندها را دارند از کش بیرون ببرید: wordpress_logged_in_، wp-postpass_، comment_author_، woocommerce_items_in_cart و wp_woocommerce_session_. اگر چنین شرطی در دسترس نیست، HTML را اصلاً در لبه کش نکنید.
  5. قانون‌های خاص را بالاتر از قانون‌های کلی کش بگذارید تا قانون کلی پیش از آن‌ها اعمال نشود.
  6. برای /wp-login.php در دیوار آتش وب محدودیت بگذارید تا تلاش‌های پیاپی ورود پیش از رسیدن به PHP گرفته شود.

آزمون پس از اعمال قانون‌ها

وردپرس برای پیشخوان و صفحه‌ی ورود خودش سرآیند ضدکش می‌فرستد. با curl ببینید این سرآیند دست‌نخورده به کاربر می‌رسد:

curl -sI https://example.com/wp-login.php | grep -i cache-control
curl -sI 'https://example.com/wp-content/themes/mytheme/style.css?ver=1.2' | grep -i cache-control

خروجی نخست باید شامل no-cache باشد و دومی مدت کش طولانی نشان دهد. آزمون انسانی هم لازم است: در یک مرورگر وارد پیشخوان شوید و چند صفحه‌ی سایت را باز کنید، سپس همان صفحه‌ها را در پنجره‌ی ناشناس یا مرورگری دیگر ببینید. اگر نوار ابزار مدیر یا نام کاربری در پنجره‌ی ناشناس پیدا شد، HTML شخصی کش شده است. درباره‌ی سرآیندهای کش و اثرشان بر شاخص‌های سرعت، CDN و سئو: اثر واقعی روی TTFB، LCP و Core Web Vitals را ببینید.

حالت SSL کامل برای وردپرس پشت CDN

تفاوت سه حالت SSL و روند جابه‌جایی میان آن‌ها در راهنمای SSL رایگان با CDN و حالت‌های انعطاف‌پذیر، کامل و سخت‌گیرانه آمده است. نکته‌ی ویژه‌ی وردپرس این است: در حالت انعطاف‌پذیر، درخواست با HTTP به مبدأ می‌رسد و تابع is_ssl() وردپرس آن را ناامن می‌بیند. اگر نشانی سایت در تنظیمات با https ذخیره شده یا ورود امن به پیشخوان اجباری باشد، وردپرس دوباره به https هدایت می‌کند و پیشخوان در حلقه می‌افتد. در حالت کامل، لبه با HTTPS به مبدأ وصل می‌شود و وردپرس بدون ترفند، درخواست را امن می‌شناسد.

روند پیشنهادی برای وردپرس:

  1. روی سرور مبدأ گواهی نصب کنید و مطمئن شوید وب‌سرور روی درگاه ۴۴۳ پاسخ می‌دهد. برای حالت سخت‌گیرانه گواهی باید معتبر و هم‌نام دامنه باشد.
  2. حالت SSL دامنه را در پنل CDN روی کامل بگذارید و پس از اطمینان از اعتبار گواهی، سخت‌گیرانه را بسنجید.
  3. از پایگاه داده پشتیبان بگیرید و نشانی ذخیره‌شده را ببینید:
wp db export backup.sql
wp option get home
wp option get siteurl
  1. نشانی‌های http را در محتوا جایگزین کنید؛ نخست با --dry-run تعداد تغییرها را ببینید:
wp search-replace 'http://example.com' 'https://example.com' --all-tables --dry-run
wp search-replace 'http://example.com' 'https://example.com' --all-tables
wp cache flush
  1. در wp-config.php ورود امن به پیشخوان را اجباری کنید: define( 'FORCE_SSL_ADMIN', true );. این خط تنها در حالت کامل یا سخت‌گیرانه بی‌خطر است.

افزونه‌ها کنار CDN؛ چه بماند و چه برود

  • افزونه‌ی کش صفحه روی مبدأ (مانند WP Super Cache یا W3 Total Cache) را نگه دارید؛ بار PHP و پایگاه داده را کم می‌کند و کاربر واردشده را درست تشخیص می‌دهد. فقط مراقب باشید برای HTML سرآیند کش طولانی نفرستد، چون لبه آن را جدی می‌گیرد.
  • افزونه‌های بازنویسی نشانی به CDN وقتی کل دامنه پشت ابر است لازم نیستند؛ پرونده‌ها همین حالا از لبه می‌آیند. تعریف یک زیردامنه‌ی جدا تنها پیچیدگی و یک رکورد DNS دیگر می‌افزاید.
  • افزونه‌های اجباری‌کننده‌ی HTTPS که هنگام بارگذاری صفحه نشانی‌ها را بازنویسی می‌کنند، پس از اصلاح پایگاه داده با WP-CLI معمولاً زائدند و می‌توانند با هدایت لبه تداخل کنند.
  • افزونه‌های امنیتی آی‌پی را برای قفل کردن تلاش‌های ورود می‌خوانند. پشت CDN ممکن است آی‌پی لبه را به جای کاربر ببینند و با چند خطای ورود، آی‌پی لبه را قفل کنند. تنظیم خواندن آی‌پی واقعی را در افزونه بررسی کنید و محدودسازی ورود را به دیوار آتش وب در لبه بسپارید.
  • افزونه‌های بهینه‌سازی تصویر مستقیم روی هزینه اثر دارند، چون CDN به‌ازای دانلود حساب می‌شود.

هزینه‌ی وردپرس پشت CDN با نرخ‌های پنل

نرخ‌ها به تاریخ آبان ۱۴۰۵ است و بهای روز را ماشین‌حساب صفحه‌ی سفارش نشان می‌دهد.

موردنرخ
دانلود از CDN۱٬۲۰۰ تومان هر گیگابایت
آپلود به CDNرایگان
ترافیک دانلود سرور ابری ساعتی۱٬۰۰۰ تومان هر گیگابایت
طرح اقتصادی ۲ (۲ هسته، ۲ گیگابایت رم، ۱۵ گیگابایت دیسک)۱٬۶۴۴ تومان در ساعت؛ ۱٬۲۰۰٬۰۰۰ تومان ماهانه
طرح حرفه‌ای ۱ (۴ هسته، ۴ گیگابایت رم، ۲۵ گیگابایت دیسک)۲٬۸۷۷ تومان در ساعت؛ ۲٬۱۰۰٬۰۰۰ تومان ماهانه

مثال ۱، وبلاگ پرتصویر: اگر دانلود ماهانه از لبه ۲۰۰ گیگابایت باشد: «۲۰۰ گیگابایت × ۱٬۲۰۰ تومان = ۲۴۰٬۰۰۰ تومان». اگر با فشرده‌سازی تصویرها و بارگذاری تنبل این حجم به ۱۲۰ گیگابایت برسد: «۱۲۰ گیگابایت × ۱٬۲۰۰ تومان = ۱۴۴٬۰۰۰ تومان»؛ یعنی ۹۶٬۰۰۰ تومان کمتر در ماه. بارگذاری رسانه از پیشخوان آپلود به شمار می‌آید و در صورتحساب CDN نمی‌آید.

مثال ۲، نسخه‌ی آزمایشی برای سنجش قانون‌ها: پیش از اعمال قانون‌های کش روی سایت اصلی، یک کپی روی طرح اقتصادی ۲ بسازید و دو روز آزمون کنید: «۴۸ ساعت × ۱٬۶۴۴ تومان = ۷۸٬۹۱۲ تومان» به‌علاوه‌ی ترافیک دانلود آن. اگر ووکامرس سنگین دارید و آزمون سه‌روزه روی طرح حرفه‌ای ۱ لازم است: «۷۲ ساعت × ۲٬۸۷۷ تومان = ۲۰۷٬۱۴۴ تومان». پس از آزمون سرور را حذف کنید؛ خاموش کردن هزینه‌ی ساعتی را متوقف نمی‌کند چون منابع برای سرور نگه داشته می‌شود. ساعت ناقص هم کسر نمی‌شود و به دور بعد می‌رود.

اشتباه‌های رایج

کش کردن HTML بدون استثنای کوکی ورود

نتیجه‌اش دیده شدن نوار مدیر یا سبد خرید یک نفر برای دیگران است. راه پرهیز: یا HTML را در لبه کش نکنید، یا تنها وقتی کش کنید که قانون دورزدن بر پایه‌ی کوکی‌های wordpress_logged_in_ و کوکی‌های ووکامرس فعال باشد، و آزمون پنجره‌ی ناشناس را پس از هر تغییر تکرار کنید.

حذف رشته‌ی پرس‌وجو از کلید کش

پس از به‌روزرسانی قالب، CSS تازه با ?ver= جدید درخواست می‌شود ولی لبه نسخه‌ی قبلی را می‌دهد و ظاهر سایت به هم می‌ریزد. راه پرهیز: برای مسیرهای قالب، افزونه و wp-includes رشته‌ی پرس‌وجو را در کلید کش نگه دارید.

اجباری کردن HTTPS پیشخوان در حالت انعطاف‌پذیر

افزودن FORCE_SSL_ADMIN یا ذخیره‌ی نشانی https وقتی لبه با HTTP به مبدأ وصل می‌شود، پیشخوان را در حلقه‌ی هدایت می‌اندازد. راه پرهیز: اول گواهی مبدأ و حالت کامل، بعد تغییر تنظیمات وردپرس.

پرسش‌های متداول

ووکامرس پشت CDN به تنظیم جداگانه نیاز دارد؟

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

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

چون HTML صفحه‌ی اصلی در لبه یا در افزونه‌ی کش مبدأ تا پایان مدت کش می‌ماند. برای HTML مدت کوتاه بگذارید یا آن را در لبه کش نکنید و پاک‌سازی را به افزونه‌ی کش مبدأ بسپارید.

باید نشانی پرونده‌ها را به زیردامنه‌ای مثل cdn.example.com ببرم؟

وقتی کل دامنه پشت ابر است نیازی نیست؛ پرونده‌ها از همان دامنه و از لبه سرو می‌شوند. زیردامنه‌ی جدا تنها وقتی معنا دارد که بخواهید فقط پرونده‌ها و نه HTML از CDN بگذرند.

بارگذاری تصویر از پیشخوان وردپرس در صورتحساب CDN می‌آید؟

خیر. بارگذاری، آپلود به شمار می‌آید و در CDN رایگان است؛ تنها دانلود، یعنی دیده شدن آن تصویر به دست بازدیدکننده‌ها، حساب می‌شود.

جمع‌بندی

برای راه‌اندازی درست CDN برای وردپرس سه کار کافی است: پرونده‌های ایستا را با رشته‌ی پرس‌وجو در کلید کش طولانی کنید، پیشخوان، ورود، REST API و صفحه‌های شخصی را از کش بیرون ببرید، و پیش از هر تغییر در تنظیمات HTTPS وردپرس، مبدأ را به حالت SSL کامل برسانید. بعد افزونه‌های زائد را بردارید و با آزمون پنجره‌ی ناشناس مطمئن شوید چیزی شخصی کش نشده است. اگر می‌خواهید این قانون‌ها را اول روی یک نسخه‌ی آزمایشی بسنجید، می‌توانید سرور ساعتی و CDN را کنار هم در ابر ویرا راه بیندازید و پس از آزمون، سرور آزمایشی را حذف کنید.

سرور مجازی ساعتی ایرانآی‌پی ایرانایران‌اکسس

سرور مجازی ساعتی ایران؛ آی‌پی، تأخیر، محدودیت‌ها و نکات انتخاب

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

ادامه‌ی مطلب
CDNسئوCore Web Vitals

CDN و سئو: اثر واقعی روی TTFB، LCP و Core Web Vitals

CDN خودش عامل رتبه نیست. با کوتاه کردن TTFB و LCP، داده‌ی میدانی Core Web Vitals را بهتر می‌کند. این راهنما تنظیم کش، فشرده‌سازی و HTTPS را با فرمان‌های آماده نشان می‌دهد و خطاهایی را که ایندکس را خراب می‌کنند، همراه با هزینه‌ی واقعی، شرح می‌دهد.

ادامه‌ی مطلب
سرور ساعتیهزینه سرور ابریترافیک دانلود

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

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

ادامه‌ی مطلب