کافه لایسنس
بازگشت به بلاگ
آموزش ۱۳ خرداد ۱۴۰۵ ۹۴ بازدید تیم کافه لایسنس

رفع خطای 504 Gateway Timeout در وردپرس؛ مشکل المنتور پرو در ایران و راه‌حل قطعی

رفع خطای 504 Gateway Timeout در وردپرس؛ مشکل المنتور پرو در ایران و راه‌حل قطعی

اگر دنبال رفع خطای 504 وردپرس هستید و سایت‌تان مدام «Gateway Timeout» می‌دهد، در ایران معمولاً یک مقصر اصلی دارد: افزونه‌ی المنتور پرو و تماس آن با سرورهای فیلترشده‌ی لایسنس. در این راهنما، علت دقیق و یک راه‌حل کامل و تست‌شده را قدم‌به‌قدم توضیح می‌دهیم تا بدون حذف المنتور، سایت‌تان پایدار شود.

خطای 504 وردپرس چیست و چه نشانه‌هایی دارد؟

خطای 504 Gateway Timeout یعنی سرور وب (یا CDN جلوی سایت مثل آروان‌کلاد) منتظر پاسخ از پردازش وردپرس مانده و چون پاسخ به‌موقع نرسیده، انتظار را رها کرده است. نشانه‌های رایج این مشکل در ایران:

·      سایت به‌صورت دائم یا متناوب خطای 504 Gateway Timeout نشان می‌دهد.

·       صفحه چند ثانیه می‌چرخد، انگار سرور «هنگ» کرده، و بعد ارور می‌دهد.

·      با غیرفعال‌کردن همه‌ی افزونه‌ها سایت بالا می‌آید، اما با فعال‌کردن المنتور پرو خطای ۵۰۴ برمی‌گردد.

·      فضای دیسک، اینود و پهنای باند هاست هم پر نشده‌اند.

اگر این نشانه‌ها آشناست، مشکل از کد یا منابع هاست شما نیست؛ ریشه در فیلترینگ و تماس افزونه با سرورهای خارج از ایران است.

چرا المنتور پرو در ایران باعث خطای 504 می‌شود؟

افزونه‌های دارای لایسنس مثل المنتور پرو برای بررسی اعتبار لایسنس و چک آپدیت، به‌صورت دوره‌ای به سرورهای خودشان درخواست می‌فرستند؛ یعنی به دامنه‌هایی مانند my.elementor.com و api.elementor.com.

این درخواست‌ها در سمت سرور (PHP) اجرا می‌شوند، نه در مرورگر کاربر. مشکل اینجاست:

این دامنه‌ها در ایران مسدود هستند. وقتی PHP به آن‌ها درخواست می‌زند، به‌جای پاسخ سریع، تا رسیدن به تایم‌اوت (۳۰ تا ۶۰ ثانیه) معطل می‌ماند. در این مدت کل بارگذاری صفحه قفل می‌شود و در نهایت کاربر خطای 504 می‌گیرد.

نقش WP-Cron در تکرار این خطا

وردپرس زمان‌بند داخلی خود، WP-Cron، را روی هر بازدید از سایت اجرا می‌کند. کارهای زمان‌بندی‌شده‌ی المنتور (مثل همین چک لایسنس) از طریق همین WP-Cron اجرا می‌شوند؛ یعنی این تماسِ معطل‌کننده روی بازدیدهای عادی کاربران هم تکرار می‌شود و سایت را زمین می‌زند.

چطور تشخیص دهیم مشکل از لایسنس المنتور است؟

پیش از اعمال راه‌حل، با این مراحل از تشخیص مطمئن شوید:

1.     منابع هاست را چک کنید. اگر دیسک، اینود و پهنای باند پر نشده‌اند، مشکل از منابع نیست.

2.    افزونه‌ها را موقتاً غیرفعال کنید. در مدیریت فایل هاست وارد wp-content شوید و نام پوشه‌ی plugins را به plugins-off تغییر دهید. اگر سایت بالا آمد، مقصر یکی از افزونه‌هاست.

3.     مقصر را پیدا کنید. نام پوشه را برگردانید و در پیشخوان، افزونه‌ها را یکی‌یکی فعال کنید. هر افزونه‌ای که خطای ۵۰۴ را برگرداند مقصر است (در اکثر موارد المنتور پرو).

4.     لاگ خطا را روشن کنید تا دامنه‌ی دقیق معطل‌کننده را در فایل wp-content/debug.log ببینید:

define('WP_DEBUG', true);

define('WP_DEBUG_LOG', true);

define('WP_DEBUG_DISPLAY', false);

راه‌حل قطعی رفع خطای 504

نکته‌ی کلیدی این است که نباید المنتور پرو را حذف کنیم (کل قالب سایت با آن ساخته شده). در عوض کاری می‌کنیم که این تماس‌های خارجی به‌جای معطلیِ طولانی، بلافاصله شکست بخورند تا سایت دیگر هنگ نکند. برای این کار از یک افزونه‌ی کوچک mu-plugin استفاده می‌کنیم که زودتر از بقیه اجرا می‌شود و به‌صورت اتفاقی هم غیرفعال نمی‌شود.

گام ۱: ساخت افزونه‌ی محافظ

در مدیریت فایل هاست وارد پوشه‌ی wp-content شوید. اگر پوشه‌ی mu-plugins وجود ندارد آن را بسازید (فایل باید مستقیماً داخل همین پوشه باشد، نه در زیرپوشه). سپس فایلی به نام iran-elementor-guard.php بسازید و کد زیر را در آن قرار دهید:

<?php

/**

 * Plugin Name: Iran Elementor Outbound Guard

 * Description: جلوگیری از معطل‌شدن صفحات به‌خاطر تماس المنتور با سرورهای فیلترشده (رفع خطای 504).

 */

if (!defined('ABSPATH')) exit;

 

// 1) هر درخواست خروجی به سمت سرورهای المنتور را بلافاصله متوقف کن

add_filter('pre_http_request', function ($pre, $args, $url) {

    $host = parse_url($url, PHP_URL_HOST);

    if ($host && stripos($host, 'elementor.com') !== false) {

        return new WP_Error('blocked_outbound', 'Elementor cloud call blocked');

    }

    return $pre;

}, 10, 3);

 

// 2) لایه‌ی اطمینان: سقف زمان انتظار همه‌ی درخواست‌های خروجی

add_filter('http_request_args', function ($args) {

    if (!isset($args['timeout']) || $args['timeout'] > 8) $args['timeout'] = 8;

    return $args;

}, 999);

گام ۲: غیرفعال‌کردن WP-Cron روی بازدیدها

فایل wp-config.php را باز کنید و بالای خط «That’s all, stop editing» این خط را اضافه کنید:

define('DISABLE_WP_CRON', true);

گام ۳: ساخت یک کرون واقعی روی سرور

چون WP-Cron را خاموش کردیم، در بخش Cron Jobs کنترل‌پنل هاست یک زمان‌بندی هر ۳۰ دقیقه بسازید (به‌جای yoursite.com آدرس سایت خودتان را بگذارید):

*/30 * * * * wget -q -O /dev/null "https://yoursite.com/wp-cron.php?doing_wp_cron" >/dev/null 2>&1

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

·       خط اول کد، قبل از اینکه المنتور فرصت معطلی پیدا کند، هر تماس به elementor.com را فوراً ناموفق اعلام می‌کند. لایسنس برای نمایش صفحاتی که قبلاً ساخته‌اید لازم نیست؛ پس صفحات سالم بالا می‌آیند.

·      لایه‌ی دوم، سقف زمان انتظار سایر تماس‌های خارجی را هم پایین می‌آورد تا اگر افزونه‌ی دیگری هم چنین رفتاری داشت، سایت را زمین نزند.

·      خاموش‌کردن WP-Cron و جایگزینی با کرون واقعی، بار این کارها را از روی دوش بازدیدکننده برمی‌دارد.

پس از این مراحل، سایت بلافاصله و بدون خطای ۵۰۴ بالا می‌آید. ممکن است در پیشخوان پیام «اتصال و فعال‌سازی لایسنس» را ببینید که کاملاً بی‌خطر است.

این مشکل فقط مخصوص المنتور نیست.

هر افزونه یا قالب تجاری که برای لایسنس، آپدیت یا فونت به سرورهای خارج از ایران وصل می‌شود می‌تواند همین خطای ۵۰۴ را بسازد؛ از جمله:

·      بارگذاری سمت‌سرور Google Fonts از fonts.googleapis.com

·       افزونه‌های امنیتی، بکاپ و سئوی تجاری که «به خانه زنگ می‌زنند»

·       درگاه‌ها و سرویس‌های خارجیِ فیلترشده

اگر در debug.log دیدید دامنه‌ی دیگری باعث معطلی شده، کافی است همان دامنه را هم به فهرست بلاک در همان افزونه‌ی محافظ اضافه کنید. همچنین در تنظیمات المنتور می‌توانید میزبانی محلی فونت‌های گوگل را فعال کنید.

سوالات متداول درباره خطای 504 وردپرس

خطای 504 Gateway Timeout یعنی چه؟

یعنی سرور وب یا CDN منتظر پاسخ از وردپرس مانده و چون پاسخ در زمان مجاز نرسیده، درخواست را رها کرده است. برخلاف خطای 500، این خطا نشانه‌ی «کندی/معطلی» است نه خرابی کد.

چرا فقط در ایران این خطا را می‌گیرم؟

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

آیا باید المنتور پرو را حذف کنم؟

خیر. با افزونه‌ی mu-plugin معرفی‌شده در این مقاله، فقط تماس‌های معطل‌کننده مهار می‌شوند و المنتور و صفحات شما کاملاً سالم کار می‌کنند.

بعد از این کار لایسنس المنتور غیرفعال می‌شود؟

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

این روش روی سرعت سایت تأثیر منفی دارد؟

برعکس؛ چون دیگر هر بازدید منتظر تایم‌اوت ۶۰ ثانیه‌ای نمی‌ماند، سرعت و پایداری سایت به‌شکل محسوسی بهتر می‌شود.

جمع‌بندی

خطای 504 روی سایت‌های وردپرسی در ایران، در بیشتر مواقع نه به‌خاطر ضعف هاست، بلکه به‌خاطر تماس افزونه‌های خارجی با سرورهای فیلترشده رخ می‌دهد. با یک افزونه‌ی کوچک mu-plugin می‌توان این تماس‌ها را مهار کرد و سایت را پایدار نگه داشت؛ بدون اینکه افزونه‌ی محبوب‌تان را کنار بگذارید.

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

کد اسکیمای FAQ (در بخش هدر یا افزونه‌ی اسکیما قرار دهید)

این کد، سوالات متداول بالا را برای گوگل قابل‌فهم می‌کند و شانس نمایش در نتایج ویژه و جستجوی هوش مصنوعی را بالا می‌برد:

<script type="application/ld+json">

{

  "@context": "https://schema.org",

  "@type": "FAQPage",

  "mainEntity": [

    {

      "@type": "Question",

      "name": "خطای 504 Gateway Timeout یعنی چه؟",

      "acceptedAnswer": {

        "@type": "Answer",

        "text": "یعنی سرور وب یا CDN منتظر پاسخ از وردپرس مانده و چون پاسخ در زمان مجاز نرسیده، درخواست را رها کرده است. برخلاف خطای 500، این خطا نشانه‌ی «کندی/معطلی» است نه خرابی کد."

      }

    },

    {

      "@type": "Question",

      "name": "چرا فقط در ایران این خطا را می‌گیرم؟",

      "acceptedAnswer": {

        "@type": "Answer",

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

      }

    },

    {

      "@type": "Question",

      "name": "آیا باید المنتور پرو را حذف کنم؟",

      "acceptedAnswer": {

        "@type": "Answer",

        "text": "خیر. با افزونه‌ی mu-plugin معرفی‌شده در این مقاله، فقط تماس‌های معطل‌کننده مهار می‌شوند و المنتور و صفحات شما کاملاً سالم کار می‌کنند."

      }

    },

    {

      "@type": "Question",

      "name": "بعد از این کار لایسنس المنتور غیرفعال می‌شود؟",

      "acceptedAnswer": {

        "@type": "Answer",

        "text": "نمایش صفحاتی که ساخته‌اید به اعتبار آنلاین لایسنس وابسته نیست و سالم می‌مانند. فقط دریافت آپدیت و قالب‌های کتابخانه‌ی آنلاین محدود می‌شود."

      }

    },

    {

      "@type": "Question",

      "name": "این روش روی سرعت سایت تأثیر منفی دارد؟",

      "acceptedAnswer": {

        "@type": "Answer",

        "text": "برعکس؛ چون دیگر هر بازدید منتظر تایم‌اوت ۶۰ ثانیه‌ای نمی‌ماند، سرعت و پایداری سایت به‌شکل محسوسی بهتر می‌شود."

      }

    }

  ]

}

</script>

رفع خطای 504 وردپرسخطای 504 المنتورارور 504 Gateway Timeoutمشکل لایسنس المنتور پرو در ایران