هیچی بدتر از این نیست که وارد سایت وردپرسی خودتون بشین و یه صفحه سفید خطا ببینین! بعضی از این خطاها رو قبلاً راجع بهشون صحبت کردیم؛ مثل خطای صفحه سفید مرگ، خطای 502، خطای 503 و خیلی از خطاهای رایج دیگه. اما امروز میخوایم در مورد رفع خطای 504 یا رفع ارور Gateway Timeout صحبت کنیم. بهتره توصیههای مربوط به این خطا و نحوه برطرف کردنش در سایت وردپرسی رو یاد بگیرین.
برای شروع بهتره ببینیم اصلاً این خطا چیه و چطوری به وجود میاد:
خطای 504 یا خطای Gateway Timeout چیست؟
قبل از این که بخواین در مورد رفع ارور Gateway Timeout بدونین، بهتره یاد بگیرین که این خطا چیه و چطوری به وجود میاد.
هر وقت مرورگر خودتون رو باز میکنین و وارد یه سایت میشین، یه درخواستی به سرور وب میزبان اون سایت ارسال میشه. سپس سرور وب درخواست رو پردازش میکنه و منابع درخواست شده رو به همراه HTTP Header ارسال میکنه که شامل تعداد زیادی از کدهای موقعیتی HTTP است و نشون میدن که همه چیز اوکیه یا نه!
البته باید بدونین که همه کدهای موقعیتی HTTP بد نیستن؛ مثلاً کد موقعیتی 200 نشون میده که همه چی اوکیه!
انواع مختلفی از کدهای موقعیتی 500 وجود داره (500، 501، 502،503، 504، 520 و غیره) که هر کدوم یه معنی خاصی دارن. این کدها نشون میدن که درخواست شما ارسال و قبول شده ولی سرور از اجرای اون درخواست جلوگیری کرده!
در این حالت یه خطای 504 Gateway Timeout برای شما ظاهر میشه و به این معنیه که سروری که به عنوان یه دروازه عمل میکنه، منتظر پاسخ از یه سرور دیگه است یعنی در واقع دو تا سرور در این خطا دخیل هستن که یکی از اونها منتظر جواب یه سرور دیگه است.
انواع خطای 504
با توجه به مرورگرهای مختلف، سیستم عامل ها و سرورها یه خطای 504 میتونه خودش رو تو اشکال مختلفی نشون بده که البته همه اونها یه معنای یکسان دارن و نحوه رفع خطای 504 در اونها مشابهه. ما در قسمت زیر یه چندتا مدلهای این ارور رو برای شما آوردیم:
- “504 Gateway Timeout”
- “504 Gateway Timeout NGINX”
- “NGINX 504 Gateway Timeout”
- “Gateway Timeout Error”
- “Error 504”
- “HTTP Error 504”
- “HTTP Error 504 – Gateway Timeout”
- “HTTP 504”
- “504 Error”
- “(Gateway Timeout (504″
- “This page isn’t working – Domain took too long to respond”
- “504 Gateway Time-out – The server didn’t respond in time”
- A blank white screen
حتی بعضی از سایت برای این خطا یه صفحه سفارشی هم میسازن.
ارور 504 و سئو
برخلاف خطای 503 که به گوگل میگه بعداً برای بررسی برگرد، ارور 504 در صورت رفع نشدن میتونه تاثیر منفی روی سئو بذاره. پس حالا متوجه میشین که رفع خطای 504 چقد مهم و حیاتیه! اگه سایت شما فقط 10 دقیقه داون بشه و همون موقع گوگل خزنده هاش رو بفرسته سراغ شما، ممکنه گوگل سایت رو به راحتی از کش دریافت کنه که خب تو همچین حالتی اوضاع خوبه! اما اگه سایت شما برای مدت زمان بیشتری داون باشه، مثلاً بیشتر از شش ساعت، ممکنه گوگل خطای 504 رو به عنوان یه مسئله در سطح سایت ببینه که قطعاً روی رتبه بندی شما تاثیر منفی داره.
اگه نگران تکرار این خطا و تاثیر منفی که روی سئو و رتبه بندی سایت دارن، هستین بهتره با ما همراه باشبن تا راههای رفع ارور Gateway Timeout رو یاد بگیرین و خیال خودتون رو راحت کنین.
نحوه رفع خطای 504
به نظرتون در صورت مشاهده خطای Gateway Timeout در سایت وردپرس بهتره عیب یابی رو از کجا شروع کنیم؟ بدون داشتن اطلاعات کافی این کار میتونه سخت و ناامید کننده باشه.
به طور معمول این موارد مربوط به اتصال به شبکه و یا وجود یه مشکل در سروری است که میزبان سایت است. اما با این وجود احتمالش هست که یه خطای از سمت کاربر یا حتی نتیجه یه افزونه شخص ثالث باشه.
بنابراین ما باید در این روشهایی که برای رفع ارور 504 ارائه میدیم، به همه این نکات دقت داشته باشیم.
1. بارگیری مجدد صفحه
یکی از سادهترین و اولین مواردی که هنگام مواجه با خطای Gateway Timeout باید امتحان کنین اینه که فقط یه دقیقه صبر کنین و صفحه رو یه بار دیگه بارگیری کنین تا سایت به حالت عادی خودش برگرده (Ctrl+F5).
ممکنه سرور یا میزبان به راحتی بارگیری بشه و در حالی که منتظر هستین، میتونین به سرعت مرورگر دیگهای رو هم امتحان کنین!
یه کار دیگه که میتونین برای رفع خطای 504 انجام بدین اینه که سایت رو در downforeveryoneorjustme.com قرار بدین. این وبسایت بهتون میگه که آیا سایت شما داون شده یا یه مشکلی از طرف مرورگر و یا همون کاربر به وجود اومده. ابزاری مانند این، کد موقعیتی HTTP که از سرور برگردونده میشه رو بررسی میکنه. اگه چیزی جز کد 200، که به معنی همه چیز اوکیه، باشه یعنی سایت داون شده و باید دنبال رفع مشکل 504 باشین.
2. غیرفعال کردن تنظیمات پروکسی
در صورت استفاده از سرویس پروکسی، گاهی اوقات ممکنه خطای 504 رو مشاهده کنین. این اتفاق معمولاً خیلی نادره خصوصاً از سمت کاربر. با این حال ممکنه تنظیماتی وجود داشته باشه که شما راجع به اون چیزی ندونین و غیر فعال کردنش باعث رفع خطای 504 بشه.
3. مسائل مربوط به DNS
مورد بعدی که میتونه باعث به وجود اومدن خطای Gateway Timeout بشه، مسائل مربوط به DNS سمت مشتری است. این اتفاق میتونه در دو طرف بیفته، اولین سمتش، سمت سرور است مثل همین موردی که دامنه نمیتونه با IP درست مپ بشه! اگه به تازگی سایت وردپرس خودتون رو به یه هاست جدید منتقل کردین مهمه که منتظر انتشار همه چیز باشین که این انتشار در بعضی موارد تا 24 ساعت طول میکشه. این امر به مقدار TTL سوابق DNS شما بستگی داره. میتونین از یه ابزار رایگان مثل DNSMap برای بررسی این که آیا DNS شما در سراسر جهان پخش شده یا خیر، بررسی کنین.
مورد دوم مسئله DNS سمت کاربره که در این حالت میتونین وارد کش محلی DNS بشین و سعی کنین اون رو پاک کنین (پاک کردنش دقیقاً مثل پاک کردن کش مرورگر است).
در ویندوز هم میشه به راحتی Command Prompt رو باز کنین و موارد زیر رو وارد کنین:
ipconfig/flushdns
وقتی که کش رو پاک کردین باید این پیام رو ببینین “Successfully Flushed the DNS Resolve Cache“.
کاربران macOS هم میتونن لاین زیر رو وارد کنن فقط بعد از اتمام کار دیگه پیامی برای اونها ارسال نمیشه:
dscacheutil-flushcache
و در آخر این که میتونین سرورهای DNS سمت کاربر رو به طور موقت تغیر بدین. این سرویسها بای دیفالت توسط ISP شما اختصاصی میشن. اما میتونین سعی کنین این موارد رو به یه سرور DNS عمومی مثل گوگل تغییر بدین و با این کار باعث رفع مشکل 504 بشین.
4. غیر فعال کردن موقتی CDN
یکی از مواردی که میتونه باعث خطای 504 بشه، شبکه تحویل محتوا یا CDN است. اگه شما از یه ارائه دهنده CDN شخص ثالث استفاده میکنین، یه راه آسون برای رفع خطای Gateway Timeout ، غیر فعال کردن موقتی CDN است. به عنوان مثال افزونه CDN Enabler یه پلاگین خوب برای امتحان کردن سایت شماست. اگه نمیتونین به داشبورد سایت خودتون دسنرسی داشته باشین به سادگی از طریق SFTP وارد سایت خودتون بشین و پوشه افزونه رو به cdn-enabler_old تغییر نام بدین.
با این روش اتصال CDN به طور موقت غیرفعال میشه. البته یادتون باشه که WP Rocket و هر افزونه دیگهای که به CDN متصل بوده هم غیرفعال میشه.
این مسئله ممکنه گاهی اوقات با سرویسهای پراکسی مثل Cloudflare یا Sucuri نیز رخ بده، زیرا بین اونها یه سری فایروال اضافی وجود داره. خیلی از اونها هم در هنگام برگشتن توسط سرور مبدا شما، کد موقعیتی 500 رو کش میکنن. ما متوجه شدیم که این اتفاق یه بار در برنامه Cloudflare رخ میده و متاسفانه چون این یه سرویس کاملاً پروکسی است، هیچ راه سریعی برای غیرفعال کردن اون وجود نداره.
5. مشکلات مربوط به سرور
مسئله سرور یکی از رایجترین دلایلی برای خطای 504 است که کاربران باهاش مواجه میشن. در این صورت شما باید سرور خودتون رو با ابزارهایی مثل CMS چک کنین تا از دلیل خطا مطمئن بشین.
- خطای 504 بیشتر در سایت های پر ترافیک و تجاری مثل WooCommerce اتفاق میفته که درخواستهای غیرقابل انکار زیادی دارن و همین درخواستها خیلی اوقات میتونن باعث اضافه بار سرور بشن. با این حال ما این خطاها رو در انواع سایت ها و وبلاگها مشاهده میکنیم. این اتفاق مخصوصاً وقتی پیش میاد که شما یه هاست اشتراکی دارین و منابع شما با بقیه سایت ها مشترکه! پس بهتره برای رفع خطای 504 در همچین مواردی، هاست خودتون رو ارتقا بدین!
- کند بودن سرور یکی دیگه از علتهای به وجود اومدن خطای 504 است، یعنی پاسخ دادن به درخواست شما خیلی آهسته صورت میگیره.
- تعداد PHP Worker علت دیگهایه که میتونیم بهش اشاره کنیم؛ این دستیاران باعث میشن تا کدها روی وردپرس اجرا بشن. وقتی PHP Worker سرشون شلوغ میشه یه صفی تشکیل میدن. حالا اگه این صف طولانی بشه، درخواستهای قدیمیتر نادیده گرفته میشن پس هرچی تعداد PHP Worker زیادتر باشه، درخواستها هم زودتر پاسخ داده میشن!
- مسائل مربوط به فایروال هم بخشی از این داستانه و میتونه یه خطاها، پیکربندی نادرست یا قوانینی برای جلوگیری از برقراری ارتباط داشته باشه.
- در صورتی که اتصال شبکه بین سرور پراکسی و سرور وب مشکل داشته باشه میتونه باعث تاخیر برای درخواست HTTP بشه.
- زمان انقاضای HHTP هم دلیل دیگهای برای این خطاست که میتونه موقعی که ارتباط بین مرورگر و سرور وب برای مدت طولانی باز مونده اتفاق بیفته و معمولاً وقتی است که راه اندازی وردپرس شروع میشه. یکی از راهحلهای این موضوع اینه که یه اتصال اینترنت سریعتر جایگزین کنیم یا میتونین از یه ابزار با ساپورت برای WP-CLI استفاده کنین مثل WordPress Importer Plugin.
اگه نگران این هستین که در آینده همچین خطاهایی براتون اتفاق بیفته میتونین از ابزار updateown.io نیز استفاده کنین تا در صورت بروز هر اتفاقی بهتون خبر بده. یعنی اگه خدایی نکرده سایت شما داون شد این ابزار براتون یه ایمیل ارسال میکنه و شما کمر به رفع ارور Gateway Timeout ببندین.
6. اسپم، ربات یا حملات DDoS
یکی از دلایلی که باعث خطای 504 میشه اینه که سایت شما توسط محتوای اسپم، ربات ها یا حملات DDoS داون شده باشه و خب اینطوری به یه سری از درخواستها رسیدگی نمیشه و این خطا ظاهر میشه. بعضی اوقات این عوامل باعث سردرگمی سرور و درنتیجه خطای 504 میشه.
میتونین ترافیک یا IP هایی که در سرور شما مسدود شدن رو شناسایی کنین و برای کمک از یه افزونه امنیتی WordPress استفاده کنین. با این کار میتونین باعث رفع خطای 504 بشین!
7. بررسی افزونه ها و تم ها
خیلیها ممکنه بگن که افزونه ها یا تم های شخص ثالث میتونن باعث ایجاد خطای 504 بشن. درسته که بیشتر این موارد باعث این اتفاق نمیشن ولی با این حال یه درخواست ناپایدار از یه افزونه میتونه باعث تاخیر بشه چون که این کار بیشتر PHP Worker شما رو مسدود میکنه و در نتیجه درخواستهای قدیمیتر جا میمونن و خطای 504 اتفاق میفته. برای رفع این مشکل چندتا راه حل وجود داره، مثلاً یکیش غیرفعال کردن افزونهها است. البته یادتون باشه اگه افزونهای رو غیرفعال کردین هیچ دادهای رو از دست نمیدین. پس نگران نباشین!
برای این کار وارد منوی افزونه ها بشین و گزینه غیرفعال کردن رو بزنین تا همه افزونه ها غیرفعال بشن.
اگه این کار باعث رفع مشکل 504 شد، باید بگردین و افزونه مقصر رو پیدا کنین. یعنی یکی یکی افزونه ها رو فعال کنین و چک کنین ببینین برای کدوم یکی از اونها همین خطا اتفاق میفته و سپس اون افزونه رو جایگزین کنین و یا با پشتیبانی تماس بگیرین.
اگه به پنل ادمین دسترسی ندارین میتونین از کلاینت FTP استفاده کنین.
این کار رو برای تم ها هم میتونین انجام بدین.
8. بررسی لاگ ها
شما باید سوابق مربوط به خطاهای خودتون رو هم بررسی کنین چون اینکار بهتون اجازه میده که اگه خطایی برای کاربر اتفاق افتاده سریعاً اون رو شناسایی کنین.
اگه میزبان شما ابزاری برای ورود به سیستم نداره، میتونین کد زیر رو به پرونده wp-config.php اضافه کنین تا حالت اشکال زدایی وردپرس فعال بشه:
define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false );
9. تنظیمات Nginx
شما سرور و سایت های خودتون رو در (Nginx+FastCGI (php-fpm یا Nginx به عنوان پراکسی برای آپاچی مدیریت میکنین، برخی تنظیمات اضافی هم وجود داره که میتونین برای جلوگیری از خطای 504 ازشون استفاده کنین.
504 Gateway Timeout Error on Nginx + FastCGI (php-fpm)
اگه از Nginx یا FastCGI استفاده میکنین، ابتدا باید در فایل PHP-FPM خودتون یه تغییری به وجود بیارین، به etc/php5/fpm/pool.d/www.conf برین و لاین زیر رو تنظیم کنین:
request_terminate_timeout = 300
در مرحله بعد باید فایل php.ini خودتون رو که به طور معمول در /etc/php.ini قرار دادره تغییر بدین. دستور العمل max_exception_time رو جستجو کنین. اگه دستور العمل موجود نیست، مقدار اون رو به 300 افزایش بدین و سپس این لاین زیر رو وارد کنین:
max_execution_time = 300
در آخر هم باید فایل nginx.conf خودتون رو اصلاح کنین و موارد زیر رو در تنظیمات میزبان مجازی Nginx خودتون اضافه کنین:
location ~ .php$ { ... fastcgi_read_timeout 300; }
سپس به سادگی Nginx و PHP-FPM رو بارگیری مجدد کنین .
service nginx reload service php5-fpm reload
504 Gateway Timeout Error on Nginx Proxy
اگه از Nginx به عنوان پراکسی برای Appache استفاده میکنین، موارد زیر رو به پرونده nginx.conf خودتون اضافه کنین:
proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600;
سپس به سادگی Nginx رو بارگیری مجدد کنین.
حرف آخر
همانطوری که دیدین روشهای زیادی برای رفع خطای 504 در وردپرس شما وجود داره که میتونین با توجه به علت خطا، از یکی از این روشها استفاده کنین و سایت خودتون رو تا قبل از این که خیلی دیر بشه نجات بدین.
اگه شما هر تجربه و یا سوالی در رابطه با خطای 504 دارین حتماً از طریق کامنتها با ما در ارتباط باشین.