خطای 500 Internal Server Error یکی از گیجکنندهترین خطاهای وب است؛ چون خودش تقریباً هیچ توضیحی نمیدهد. فقط میگوید «چیزی روی سرور خراب شده». خبر خوب این است که در بیشتر موارد علت در لاگها ثبت شده و با چند قدم منظم پیدا میشود. در این راهنما توضیح میدهیم خطای ۵۰۰ چیست، رایجترین علتهای آن در هاست cPanel، وردپرس و VPS کداماند و چطور قدمبهقدم آن را رفع کنیم.
فهرست مطالب
خطای ۵۰۰ یعنی چه؟
کدهای وضعیت ۵xx یعنی مشکل از سمت سرور است، نه کاربر. کد ۵۰۰ عمومیترین آنهاست: سرور درخواست را دریافت کرده، اما هنگام پردازش با خطایی روبهرو شده که دستهبندی دقیقتری برایش ندارد. خطاهای خویشاوند معانی مشخصتری دارند: ۵۰۲ و ۵۰۴ یعنی سرویس پشتی پاسخ نداده یا دیر پاسخ داده، و ۵۰۳ یعنی سرویس موقتاً در دسترس نیست.
اگر خطا ناگهان پس از یک تغییر، مثل نصب افزونه، بهروزرسانی یا ویرایش فایل، رخ داده، احتمالاً همان تغییر عامل آن است. از همانجا شروع کنید.
قبل از هر کاری: لاگ خطا را پیدا کنید
خطای ۵۰۰ را نباید حدس زد؛ علت آن تقریباً همیشه در یکی از این لاگها ثبت شده است:
- هاست cPanel: بخش Metrics › Errors آخرین خطاهای وبسرور را نشان میدهد. فایل
error_logدر پوشه سایت (مثلاًpublic_html) خطاهای PHP را دارد. راهنمای پنل در آموزش cPanel. - VPS با Nginx:
/var/log/nginx/error.logو لاگ PHP-FPM. - VPS با Apache:
/var/log/apache2/error.logیا مسیر معادل. - وردپرس: حالت اشکالزدایی وردپرس را بهطور موقت روشن کنید تا خطاها در فایل لاگ ثبت شوند، بدون نمایش به بازدیدکنندگان:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
این خطوط را در wp-config.php پیش از جمله «That’s all, stop editing» قرار دهید؛ خطاها در wp-content/debug.log ثبت میشوند. پس از رفع مشکل، آنها را برگردانید.
sudo tail -n 50 /var/log/nginx/error.log
sudo tail -f /var/log/nginx/error.log # همزمان صفحه را رفرش کنید
رایجترین علتها
| نشانه در لاگ | علت محتمل |
|---|---|
| Invalid command یا RewriteRule در لاگ Apache | .htaccess خراب یا دستور پشتیبانینشده |
| PHP Fatal error: Allowed memory size exhausted | کمبود memory_limit |
| PHP Fatal error: Uncaught Error … in /wp-content/plugins/… | خطای یک افزونه یا قالب |
| Permission denied | دسترسی یا مالکیت نادرست فایلها |
| Call to undefined function یا خطای Syntax پس از تغییر نسخه PHP | ناسازگاری نسخه PHP |
| Maximum execution time exceeded | اسکریپت سنگین یا Timeout |
۱. فایل .htaccess خراب
در هاستهای Apache و LiteSpeed، یک خط اشتباه در .htaccess کل سایت را با خطای ۵۰۰ از کار میاندازد. نام فایل را موقتاً تغییر دهید (مثلاً به .htaccess.bak) و سایت را تست کنید. اگر درست شد، برای وردپرس از پیشخوان › تنظیمات › پیوندهای یکتا، دکمه ذخیره را بزنید تا فایل سالم دوباره ساخته شود. سپس قوانین اضافه شده توسط افزونهها را یکییکی برگردانید تا قانون مشکلساز پیدا شود.
۲. خطای PHP و محدودیت حافظه
اگر لاگ از تمام شدن حافظه PHP خبر میدهد، memory_limit را افزایش دهید: در cPanel از بخش «Select PHP Version» یا «MultiPHP INI Editor»، و روی VPS در فایل php.ini نسخه مربوطه. برای وردپرس ۲۵۶ مگابایت مقدار رایجی است. اما اگر مصرف حافظه بیدلیل بالاست، افزایش حد فقط مشکل را پنهان میکند؛ افزونه یا کد پرمصرف را پیدا کنید.
۳. دسترسی نادرست فایلها
دسترسیهای بیش از حد باز (مثل ۷۷۷) در بسیاری از هاستها عمداً با خطای ۵۰۰ رد میشوند. الگوی معمول برای سایتهای PHP: پوشهها ۷۵۵ و فایلها ۶۴۴، و wp-config.php سختگیرانهتر. مالک فایلها هم باید کاربری باشد که PHP با آن اجرا میشود. توضیح کامل در دسترسی فایلها در لینوکس.
find /path/to/site -type d -exec chmod 755 {} \;
find /path/to/site -type f -exec chmod 644 {} \;
۴. افزونه، قالب یا بهروزرسانی ناموفق
اگر لاگ به فایلی در پوشه یک افزونه اشاره میکند، آن افزونه را غیرفعال کنید. وقتی به پیشخوان دسترسی ندارید، نام پوشه آن را در wp-content/plugins با File Manager یا SFTP تغییر دهید؛ وردپرس آن را غیرفعال میکند. اگر نمیدانید کدام افزونه است، نام کل پوشه plugins را تغییر دهید و سپس افزونهها را یکییکی برگردانید. با WP-CLI:
wp plugin deactivate --all
wp plugin activate plugin-name
برای قالب هم بهطور موقت یک قالب پیشفرض وردپرس را فعال کنید. اگر خطا پس از بهروزرسانی ناقص وردپرس رخ داده، فایل .maintenance در ریشه سایت را بررسی کنید.
۵. ناسازگاری نسخه PHP
ارتقای نسخه PHP سرعت و امنیت را بهتر میکند، اما افزونهها یا کدهای قدیمی ممکن است با نسخه جدید سازگار نباشند. اگر خطا پس از تغییر نسخه PHP رخ داده، نسخه قبلی را موقتاً برگردانید، سپس افزونه یا کد قدیمی را بهروز یا جایگزین کنید و دوباره ارتقا دهید. ارتقا را ابتدا روی یک نسخه آزمایشی سایت تست کنید.
۶. کمبود منابع و Timeout
در هاست اشتراکی، رسیدن به سقف منابع اکانت گاهی بهصورت ۵۰۰ یا ۵۰۸ ظاهر میشود. روی VPS، پر شدن دیسک یا تمام شدن RAM هم میتواند خطای ۵۰۰ ایجاد کند:
df -h # فضای دیسک
free -h # حافظه
اگر خطاها در ساعات شلوغ رخ میدهند، به احتمال زیاد مشکل ظرفیت است؛ راهکارها در افزایش سرعت وردپرس و نشانههای نیاز به ارتقا در VPS یا هاست اشتراکی.
چکلیست سریع
- آخرین تغییری که پیش از خطا انجام شد چه بود؟ آن را برگردانید.
- لاگ خطای وبسرور و PHP را بخوانید.
- نام
.htaccessرا موقتاً تغییر دهید. - افزونهها و قالب را غیرفعال کنید.
- محدودیت حافظه و نسخه PHP را بررسی کنید.
- دسترسی فایلها و فضای دیسک را بررسی کنید.
- اگر هیچکدام جواب نداد، از بکاپ سالم بازیابی کنید و با پشتیبانی تماس بگیرید.
سوالات متداول
آیا خطای ۵۰۰ به سئو آسیب میزند؟
خطای کوتاهمدت اثر محسوسی ندارد، اما اگر ساعتها یا روزها ادامه یابد، گوگل ممکن است دفعات خزش را کم کند و صفحات را موقتاً از نتایج حذف کند. سریع رفعش کنید و پایش داشته باشید.
چرا فقط بعضی صفحات خطای ۵۰۰ میدهند؟
معمولاً کدی که فقط در آن صفحات اجرا میشود، مثل یک افزونه یا قالب صفحه خاص، خطا دارد. لاگ را هنگام باز کردن همان صفحه بررسی کنید.
خطای ۵۰۰ از سمت کاربر قابل رفع است؟
خیر؛ خطای سمت سرور است. پاک کردن کش مرورگر فقط وقتی کمک میکند که مشکل قبلاً رفع شده و نسخه قدیمی کش شده است.
صفحه خالی سفید هم همان خطای ۵۰۰ است؟
اغلب بله؛ وقتی نمایش خطا خاموش است، خطای PHP بهصورت صفحه سفید ظاهر میشود. راهنمای کامل در صفحه سفید وردپرس.
رفع سریع خطاهای سرور
اگر نمیخواهید خودتان لاگها را بررسی کنید، خدمات مدیریت سرور تراست هاست خطاهای ۵۰۰ و مشکلات کارایی را بررسی و رفع میکند. برای سایتهای جدید هم هاست تراست هاست با پشتیبانی فنی در دسترس است.