هادی خانمیرزا

مشاور فناوری اطلاعات

کارشناس امنیت شبکه

کارشناس ارشد شبکه های کامپیوتری

ویپ (سیستم تلفنی تحت شبکه)

طراحی وب سایت

هادی خانمیرزا

مشاور فناوری اطلاعات

کارشناس امنیت شبکه

کارشناس ارشد شبکه های کامپیوتری

ویپ (سیستم تلفنی تحت شبکه)

طراحی وب سایت

بلاگ

حل مشکل Error 500 صفحه افزونه های وردپرس در زمان قطعی اینترنت

اسفند 25, 1404 آموزشی
حل مشکل Error 500  صفحه افزونه های وردپرس در زمان قطعی اینترنت

به‌طور معمول، وقتی وارد پیشخوان وردپرس می‌شوید و بر روی منوی افزونه‌ها کلیک می‌کنید، چند درخواست خارجی به سرورهای wordpress.org و سایر APIهای رسمی وردپرس می‌فرستد.
این درخواست‌ها برای بررسی آپدیت‌ها، دریافت لیست جدید افزونه و اجرای WP‑Cron لازم هستند.

اما در سرورهایی که به اینترنت متصل نیستند، فایروال یا محدودیت‌های DNS باعث می‌شود این درخواست‌ها زمان‌بر یا حتی ناموفق باشند. در نتیجه صفحه‌ی افزونه‌ها سفید می‌ماند، به مدت طولانی “Loading” می‌نشیند و در نهایت با خطای ۵۰۰ نمایش داده می‌شود.

چرا این اتفاق می‌افتد؟

  • وردپرس، قبل از نمایش لیست افزونه‌ها، به‌صورت خودکار وضعیت آپدیت‌ها را چک می‌کند.
  • برای این کار به api.wordpress.org می‌رود و یا با plugins.wordpress.org ارتباط برقرار می‌کند.
  • اگر این سرورها پاسخ ندهند، تابع wp_ajax در انتهای صف‌بندی‌شدن فراخوانی‌ها متوقف می‌شود و صفحه “پایدار” نمی‌شود.
  • در سرورهای درون‌سازمانی یا کش‌های DNS ناپایدار، این فراخوانی‌ها تا حدود چند دقیقه طول می‌کشند و در نهایت سرور پاسخ می‌دهد یا زمان‌اتش می‌شود.

راه‌حلی که همه‌ی این درخواست‌ها را مسدود می‌کند

در زیر یک بلوک کامل کد آورده شده که به‌صورت مستقیم در فایل wp-config.php قرار می‌گیرد و تمام ارتباط‌های خارجی وردپرس را غیرفعال می‌کند. بعد از رفع محدودیت‌ها یا برای محیط‌های تست، می‌توانید آن را حذف کنید.

/** ==========================================================================

 * 1️⃣  مسدود‌سازی کامل درخواست‌های خارجی وردپرس

 * ==========================================================================

 */

define( ‘WP_HTTP_BLOCK_EXTERNAL’, true );   // تمام درخواست‌های HTTP خارجی را مسدود کن

define( ‘WP_HTTP_ALLOW_LOCALHOST’, true );  // فقط دسترسی به localhost و IP داخلی را مجاز کن

/** ==========================================================================

 * 2️⃣  غیرفعال‌سازی آپدیت‌ها و ارتباط با APIهای وردپرس.org

 * ==========================================================================

 */

define( ‘AUTOMATIC_UPDATER_DISABLED’, true ); // غیرفعال‌سازی آپدیت‌های خودکار

define( ‘WP_AUTO_UPDATE_CORE’, false );       // بروز رسانی هسته به صورت خودکار

define( ‘DISALLOW_FILE_MODS’, true );         // نصب و ویرایش افزونه‌ها/قالب‌ها از پنل غیرفعال می‌شود

/** ==========================================================================

 * 3️⃣  متوقف‌کردن WP‑Cron

 * ==========================================================================

 */

define( ‘DISABLE_WP_CRON’, true );  // WP-Cron را غیرفعال کن؛ برای سرورهای محدود بسیار مفید

/** ==========================================================================

 * 4️⃣  فیلتر کردن دستی به‌صورت استثنائی به wordpress.org

 * ==========================================================================

 */

add_filter( ‘pre_http_request’, function ( $pre, $args, $url ) {

    if ( strpos( $url, ‘wordpress.org’ ) !== false ) {

        return new WP_Error( ‘blocked’, ‘External requests blocked’ );

    }

    return $pre;

}, 10, 3 );

 

 

نکته: تمام این تغییرات را در آخر فایل wp-config.php قبل از خط /* That's all, stop editing! Happy blogging. */ اضافه کنید.

چرا با این روش کار می‌کند؟

بخش کد عملکرد توضیح مختصر
WP_HTTP_BLOCK_EXTERNAL مسدود کردن تمام درخواست‌های HTTP خارج از میزبان هیچ اتصال بیرونی ایجاد نمی‌شود.
WP_HTTP_ALLOW_LOCALHOST اجازه‌ی ارتباط فقط با localhost فقط برقراری ارتباط داخل سرور مجاز است.
AUTOMATIC_UPDATER_DISABLED & WP_AUTO_UPDATE_CORE غیرفعال‌سازی آپدیت‌های خودکار وردپرس دیگر سعی در برقراری ارتباط با wordpress.org نخواهد کرد.
DISALLOW_FILE_MODS جلوگیری از نصب/ویرایش افزونه و قالب از پنل افزونه‌ها/قالب‌ها فقط از طریق FTP یا مدیریت فایل سرور نصب می‌شوند.
DISABLE_WP_CRON غیرفعال‌سازی WP‑Cron هیچ رویداد زمان‌بندی‌شده‌ای در پس‌زمینه اجرا نخواهد شد.
فیلتر pre_http_request قطع سریع هر فراخوانی به wordpress.org در صورت تغییر در تنظیمات بالا، هنوز در این خط مسدود می‌شود.

نتیجهٔ نهایی

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

این راه‌حل برای سرورهای داخلی، سازمانی، توسعه‌محیطی و هر سروری که محدودیت دسترسی به اینترنت دارد، مناسب است. در صورتی که مجدداً نیاز به دسترسی به وردپرس.org (به‌عنوان مثال برای دریافت آپدیت‌های جدید) دارید، کافی است خطوط مربوطه را حذف یا false کنید.

Tags:
پستهای مرتبط
run as administrator
🔥 یک میان‌بر طلایی برای Run as Administrator در ویندوز!

بعضی وقت‌ها فقط می‌خوای سریع یه ابزار رو با دسترسی ادمین باز کنی،اما راست‌کلیک، منو، دنگ‌وفنگ… زمان می‌بره! این میان‌بُر…

امنیت سایبری وظیفهٔ همهٔ کارکنان است، نه صرفاً واحد IT!
🛡️امنیت سایبری وظیفه‌ٔ همهٔ کارکنان است، نه فقط تیم IT!

سال‌هاست بسیاری از سازمان‌ها تصور می‌کنند که مسئولیت امنیت سایبری فقط بر عهدهٔ تیم فناوری اطلاعات (IT) است. اما تجربه…

ارسال دیدگاه