رفع خطای ۵۰۲ Bad Gateway در تمامی پلتفرمها + وردپرس
FIX 502 BAD GATEWAY ERROR ON ALL PLATFORMS + WORDPRESS
وقتی با وردپرس کار میکنید با خطاهای مختلفی رو به رو میشوید که گاها شما را سر در گم و خسته میکنند. به عنوان نمونه میتوان خطاهای white screen of death یا error establishing a database connection را نام برد. مشهورتر از اینها خطای ۵۰۲ Bad Gateway است چون این خطا نه تنها در وبسایتهای ورردپرسی بلکه در سراسر اینترنت اتفاق میافتد. از Gmail و Twitter گرفته تا Cloudflare. در این مقاله ما این خطا را در وردپرس بررسی میکنیم.
با ما در نت افراز بلاگ همراه باشید تا با راههای سریع حل این مشکل آشنا شوید.
خطای ۵۰۲ Bad Gateway چیست؟
زمانی که میخواهید از یک سایت بازدید کنید، مرورگر شما درخواستی به آن سایت ارسال میکند. سرور سایت درخواست شما را دریافت و بعد از پردازش آن، ریسورسها همراه با سرآیند (HTTP HTTP header) و کد وضعیت (HTTP HTTP status code) را برای شما ارسال میکند. در حالت عادی کد وضعیت HTTP دیده نمیشود مگر آنکه خطایی رخ داده باشد. در واقع سرور با نمایش کد وضعیت به شما میگوید که خطایی اتفاق افتاده است و کدهای دیگری نیز برای تشخیص خطا به آن ضمیمه میکند.
خطاهای وضعیت از نوع ۵۰۰ شامل خطاهای ۵۰۱، ۵۰۲، ۵۰۳، ۵۰۴ و غیره هستند که معنای آنها اندکی با هم فرق دارد. این خطاها میگویند که سرور درخواست شما را دریافت کرده ولی فرایند ذکر شده در بالا را به طور کامل انجام نداده است. خطای ۵۰۲ Bad Gateway به طور خاص به این معناست که یکی از سرورها، که به عنوان گذرگاه یا پروکسی عمل میکند پاسخ اشتباهی را از یکی از سرورهای داخلی دریافت کرده است.
گونههای مختلف خطای ۵۰۲ Bad Gateway
به خاطر تفاوتهایی که در مرورگرها، سرورها و سیستمهای عامل وجود دارد، خطای ۵۰۲ Bad Gateway به صورتهای مختلفی نمایش پیدا میکند ولی معنی همه آنها یکسان است. در زیر نمونههای مختلفی از این خطا آورده شده است.
- “۵۰۲ Bad Gateway”
- “Error 502”
- “HTTP Error 502 – Bad Gateway”
- “۵۰۲ Service Temporarily Overloaded”
- “۵۰۲ Proxy Error”
- A blank white screen
- “۵۰۲ Server Error: The server encountered a temporary error and could not complete your request”
- “HTTP 502”
- Temporary Error (502)
- That’s an error
- Bad Gateway: The proxy server received an invalid response from an upstream server
- “۵۰۲ server error”
نمونه دیگر آن به شکل زیر است.
سرویسهای دیگر مانند Twitter پیامی کاملا متفاوت برای این خطا نشان میدهد. مثلا “Twitter is over capacity”. این پیام در شکل زیر نمایش داده شده است.
همچنین، در گوگل، خطای ۵۰۲ Bad Gateway به صورت زیر نمایش داده میشود.
نقش خطای ۵۰۲ Bad Gateway در سئو
بر خلاف خطاهای ۵۰۳ که به گوگل میگوید که در زمان دیگری به سایت سر بزند، خطای ۵۰۲، اگر سریع بر طرف نشود، بر سئو تاثیر منفی میگذارد. اگر سایت شما برای ۱۰ دقیقه از کار افتاده باشد ولی برای مدتی نسبتا طولانی به شکل مناسبی عمل کرده باشد سایت میتواند از کش دلیور شود. اصلا ممکن است گوگل تا قبل از بک آپ به سراغ فراخوانی مجدد سایت شما نرود. ولی اگر سایت شما برای مدتی بیشتر از ۶ ساعت خراب باشد، ممکن است گوگل تشخیص دهد که خطای ۵۰۲ اتفاق افتاده است و این بر رنکینگ سایت شما تاثیر خواهد گذاشت. اگر نگران تکرار خطای ۵۰۲ هستید باید ببینید که اصولا این نوع خطاها به چه علتی اتفاق میافتند.
در ادامه به بررسی این موضوع میپردازیم و بعضی از راه حلها را معرفی خواهیم کرد.
چگونگی رفع خطای ۵۰۲ Bad Gateway
خطای ۵۰۲ Bad Gateway در حالت کلی ناشی از مشکل شبکه / سرور است. هر چند این نیز ممکن است که مشکل از طرف مشتری باشد. ما هر دو حالت را مختصرا بررسی میکنیم.
در ادامه خواهید دید که علتهای معمول این خطا چیست و چگونه میتوان آنها را بر طرف کرد.
صفحه را دوباره لود کنید
اولین و سادهترین کاری که در هنگام مواجهه با خطای ۵۰۲ Bad Gateway انجام میدهید این است که چند دقیقه صبر میکنید و سپس صفحه را ریفرش میکنید. ممکن است هاست یا سرور سنگین شده باشد و بالا آمدن سایت مورد نظر شما به زمان احتیاج داشته باشد. در زمانی که منتظر هستید میتوانید یک مرورگر دیگر را نیز امتحان کنید. شاید مشکل از مرورگر باشد.
راه دیگر این است که آدرس سایت را در downforeveryoneorjustme.com وارد کنید تا ببینید آیا مشکل از طرف وبسایت است یا از طرف شما.
کش مرورگر را پاک کنید
پاک کردن کش گاها به رفع خطای ۵۰۲ Bad Gateway کمک میکند. این روش را هم امتحان کنید.
مشکل DNS
خطای ۵۰۲ Bad Gateway ممکن است به خاطر مشکل DNS باشد، مثلا ممکن است نام دامنه به IP صحیح برگردانده نشود. اگر به تازگی سایت خود را به یک هاست انتقال داده باشید، برای انتشار (propagation) کامل آن گاها لازم است تا ۲۴ ساعت منتظر بمانید. این زمان به مقدار اختصاص داده شده به TTL بستگی دارد.
شما میتوانید کش DNS را هم مانند کش مرورگر پاک کنید. برای انجام این کار در ویندوز، Command Prompt را باز و دستور زیر را وارد کنید:
ipconfig /flushdns
اگر کار به درستی انجام شود باید پیام “Successfully flushed the DNS resolver Cache” را مشاهده کنید.
کاربران macOS باید دستور زیر را در ترمینال وارد کنند.
dscacheutil –flushcache
البته در این مورد بعد از انجام موفقیت آمیز کار، پیامی به کاربر نمایش داده نمیشود.
نکته آخر اینکه میتوانید سرور DNS را تغییر دهید. به طور پیشفرض سرورهای DNS به وسیله ISP شما تعیین میشود. ولی شما میتوانید به طور موقت یکی از سرورهای عمومی مانند Googles (8.8.8.8 – ۴.۲.۲.۴) را انتخاب کنید. اگر DNS شما پریمیوم باشد، فرایند انتشار در زمانی کوتاهتر انجام میشود.
مسئله را با پشتیبان سرور خود در میان بگذارید
علت اصلی خطای ۵۰۲ Bad Gateway وجود ایراد در سرور است. بعضی مواقع سرورها یک درخواست را کنسل میکنند. در واقع اگر درخواست زمانگیر باشد و روی عملکرد بقیه مشتریان تاثیر منفی بگذارد، ممکن است درخواست شما رد شود (یا به اصطلاح kill شود). این اتفاق مخصوصا در سرورهای اشتراکی پیش میآید.
مسئله دیگر این است که بعضی اوقات سرورها از کار میافتند یا اتصال آنها قطع میشود. در این مواقع نیز خطای ۵۰۲ Bad Gateway رخ خواهد داد.
غیر فعال کردن CDN و فایروال
ممکن است مشکل از طرف CDN) content delivery network) یا فایروال باشد. اگر CDN را شخص ثالث در اختیار شما قرار داده است، بهتر است موقتا آن را غیر فعال کنید. ما معمولا از افزونه ی CDN enabler استفاده میکنیم. میتوان به سادگی آن را برای مدتی غیر فعال کرد و سایت را تست کرد. اگر به داشبورد سایت خود دسترسی ندارید، از طریق SFTP وارد سایت خود شوید و نام پوشه افزونه را به cdn-enabler_old تغییر دهید. این کار به طور موقت اتصال CDN را قطع میکند. همین مسئله در مورد افزایه WP Rocket و سایر افزایههایی که به CDN مربوط میشود نیز برقرار است.
همچنین ممکن است مشکل از طرف ارائه دهندگان خدمات پشتیبانی DDoS یا سرویسهای کاملا پروکسی مانند Cloudflare (به خاطر فایروالهای اضافی آنها) باشد.
ما متوجه شدیم که هر از چند گاهی این مشکل در سرویس رایگان Cloudflare پیش میآید. متاسفانه از آنجایی که این سرویس کاملا پروکسی است نمیتوان به سادگی آن را غیر فعال کرد.
البته قبل از آنکه مشکل را گردن Cloudflare بیاندازید باید به این نکته توجه کنید که دو حالت مختلف از خطای ۵۰۲ Bad Gateway داریم. خطای اول که به صورت زیر نمایش داده میشود نشان میدهد که مشکل از طرف Cloudflare است و شما باید از آنها درخواست پشتیبانی کنید.
حالت دوم به صورت زیر است و بدین معنیست که مشکل از طرف هاست شماست.
فایروال GoDaddy
در شکل زیر نمونهای از خطای HTTP 502 و فایروال GoDaddy نمایش داده شده است. در اینجا مشکل به خاطر تعلیق عملکرد هاست و نه خود فایروال میباشد.
افزونهها و تمهای خود را بررسی کنید
در اکثر مواقع کدهای غلط در افزونهها و تمها هستند باعث ایجاد خطاهای ۵۰۲ میشود. غیر فعال کردن افزونهها در این حالت میتواند به حل مشکل کمک کند. به یاد داشته باشید که این کار باعث از بین رفتن دادههای شما نمیشود.
اگر به ادمین دسترسی داشته باشید، میتوانید به سادگی عبارت “Plugins” را جستجو کرده و آن را از طریق منوی Bulk Actions غیر فعال کنید. در این صورت تمام افزایهها غیر فعال خواهند شد. اگر مشکل با این کار حل شد میتوانید مطمئن باشید که ایراد با یکی از افزونهها است.
برای اینکه متوجه شوید کدام افزونهها مشکل ایجاد میکند، باید آنها را یکی یکی فعال کنید و بعد از هر کدام یک بار صفحه را لود کنید تا ببینید آیا خطا میدهد یا خیر. هر وقت که خطای ۵۰۲ ظاهر شد، مشخص میشود که خطا از آخرین افزونه ای است که فعال کردهاید. بعد از آن میتوانید با سازنده آن افزایه مشورت کنید یا مشکل را با وردپرس مطرح کنید.
اگر به ادمین دسترسی ندارید میتوانید در سرور خود نام پوشه افزونهها را به چیزی مانند plugins_old تغییر دهید. یک بار دیگر سایت را لود کنید. اگر این بار به مشکلی برخورد نکردید باز هم میتوان گفت که ایراد از افزونهها ست. حال باید تک تک افزونهها را امتحان کنید تا ببینید ایراد از کدام است. برای این منظور دوباره نام پوشه اول را plugins بگذارید. سپس پوشههای داخل آن را یکی یکی تغییر نام داده و سایت را لود کنید.
همیشه افزونهها ، تمها و وردپرس را آپدیت کنید. همچنین مطمئن شوید که نسخه PHP شما در سیستم پشتیبانی میشود. همواره میتوانید از هاست خود کمک بگیرید.
در بعضی مواقع، از جمله زمانی که مشکل از کدهای نادرست در افزایه باشد، WordPress developer میتواند به شما در رفع اشکال کمک کند.
قسمت ثبت رخداد را نگاه کنید
قسمت ثبت خطاها (error logs) میتواند به شما در رفع اشکالات کمک کند. کد زیر را در فایل wp-config.php اضافه کنید تا عملیات ثبت خطا فعال شود.
define( ‘WP_DEBUG’, true );
define( ‘WP_DEBUG_LOG’, true );
define( ‘WP_DEBUG_DISPLAY’, false );
log ها معمولا در دارکتوری /wp-content قرار دارند،
همچنین میتوانید فایلها log را درApache و NGINX که در مسیرهای زیر قرار دارند مشاهده کنید:
- Apache: /var/log/apache2/error.log
- NGINX: /var/log/nginx/error.log
PHP را ریاستارت کنید
در نهایت میتوانید ریاستارت PHP را هم امتحان کنید. اگر هاستی که شما از آن استفاده میکنید این قابلیت را ندارد، یک تیکت باز کرده و از آنها بخواهید PHP را ریاستارت کنند. البته با تغییر نسخه پی اچ پی نیز می توانید خودتان این کار را انجام دهید.
PHP Timeout
این اتفاق زمانی میافتد که یکی از پردازشهای PHP بیشتر از زمان max_execution_time یا max_input_time که در ساختار PHP سرور شما تعیین شده است، طول بکشد. در این صورت معمولا خطای ۵۰۲ نمایش داده میشود. برای رفع مشکل در این حالت میتوانید زمانهای max_execution_time یا max_input_time را افزایش دهید.
از پشتیبان هاست خود سوال کنید که این زمانها روی چه مقادیری تنظیم شده است و اینکه آیا میتوان آنها را افزایش داد.
خلاصه
همانطور که مشاهده کردید چند روش برای برطرف کردن خطای ۵۰۲ Bad Gateway وجود دارد. معمولا این مشکل از جانب شما نیست بلکه به هاست شما ربط دارد. همچنین ممکن است این خطا به خاطر کدهای اشتباه افزونهها و تمها باشد.
منبع: Kinsta
لطفا نظر خودتان را با ما در بخش نظرات به اشتراک بگذارید
شاد باشید.
https://www.netafraz.com/blog/how-to-fix-a-502-bad-gateway/