رفع خطای ۵۰۰ internal server error
به دلیل خطای انسانی در اعمال تغییرات، خطای ۵۰۰ internal server error بر روی هاست و یا سرور رخ میدهد ، در این آموزش به تمامی مواردی که باعث بروز خطای ۵۰۰ بر روی سرور میشوند خواهیم پرداخت.
دلایل خطای ۵۰۰ internal server error و نحوه رفع آنها
ریست شدن سرویسها
در اولین گام با برخورد به ارور ۵۰۰ در هنگام لود وبسایت ابتدا کمی صبر کنید و سپس صفحه را دوباره Refresh کنید، در بعضی از مواقع دلیل بروز ارور ریست شدن یک سرویس بر روی سرور همزمان با ارسال درخواست شما خواهد بود.
بررسی لاگ های سرور
اولین و مهمترین قدم در برخورد با خطای ۵۰۰ internal server error بررسی لاگهای سرور و یا لاگ سایت خواهد بود، اگر مدیر یک وبسایت هستید و با این مشکل روبرو شدهاید با رفتن به بخش File Manager هاست خود میتوانید با بررسی فایل error_log در آخرین خطوط آن دلیل بروز این خطا را مشاهده کنید.
اگر هم مدیر سرور هستید و این خطا را با دسترسی root بر روی سرور بررسی میکنید باید به دنبال این فایل بر روی سرور لینوکسی خود باشید، به صورت پیشفرض مسیر این فایل در var/log/httpd/error_log/ قرار دارد البته مسیر فایلهای لاگ وب سرور با توجه به نوع کنترل پنل متفاوت هستند.
اگر مسیر فایل error_log را نمیدانید و یا به هر لیلی نتوانستید آن را پیدا کنید کافی است از دستور زیر برای جستجو و یافتن آن استفاده کنید.
۱
|
Find / –name error_log
|
اگر فایل error_log سرور شما حجیم است و برای خواندن و بررسی آن دچار مشکل هستید و دلیل بروز رخ داد خطای ۵۰۰ internal server error را میدانید کافی است دستور زیر را در ssh وارد نمایید.
۱
|
more /var/log/httpd/error_log | grep yourfilename
|
به جای yourfilename نام اسکریپتی که دلیل بروز این خطا هستش رو وارد کنید تا خطوط مربوط به آن برای شما نمایش داده شوند.
چنانچه دلیل بروز ارور را نمیدانید کافی است دستور زیر را توسط ssh وارد کنید، این دستور به صورت RealTime ارورهای رخ داده را برای شما نمایش میدهد.
۱
|
tail –f /var/log/httpd/error_log
|
حالا به مرورگر خود رفته و یکبار دیگر صفحه سایت خود را Refresh کنید حالا دلیل بروز خطا باید برای شما در ssh سرور نمایش داده شود.
حالا بعد از یافتن دلایل خطای ۵۰۰ internal server error میتوانید نسبت به رفع آن اقدام کنید، تمامی دلایلی که ممکن است باعث بروز این خطا شده باشند را در این مقاله برای شما بیان کردیم که با توجه به خروجی به دست آمده در مرحله قبل میتوانید از بخش موردنظر جهت رفع خطا ۵۰۰ اقدام کنید.
بررسی پرمیژن فایلها و دایرکتوریها
اولین و شناخته شده ترین دلیلی که معمولاً باعث بروز خطای ۵۰۰ بر روی سرور میشود دسترسی نادرست فایلها و دایرکتوریهای موجود بر روی هاست و یا سرور است.
عموماً تمامی فایلها بر روی سرور لینوکس باید دارای permission ابتدایی ۶۴۴ باشند و دایرکتوریها حتماً بر روی ۷۵۵ تنظیم شده باشند، البته در بعضی از موارد مجبور هستید دسترسی بعضی از دایرکتوریهای را بر روی ۷۷۷ قرار دهید، البته این موارد در حالتهای خاصی نیاز هستند ولی عموماً ۷۵۵ برای دایرکتوریهای شما کفایت میکنند.
خوب حالا شاید سؤال داشته باشید که چطوری بر روی یک سرور بزرگ و با فایلهای متعدد این دسترسیها را چک کنیم، لینوکس طبق معمول دستورات قدرتمندی را برای شما ارائه داده که میتوانید با دستور زیر تمامی فایلها و دایرکتوریهایی که دارای پرمیژن تعیین شده هستند را پیدا کند.
۱
۲
|
Find / –type f –perm ۶۴۴
Find / –type d –perm ۷۵۵
|
اگر بر روی سایت خود فایلهای کمی دارید و دسترسی مدیر سرور را ندارید کافی است بر روی هاست خود در ستون دسترسیها اقدام به بررسی و تغییر آنها کنید.
یکی دیگر از دلایل بروز خطای ۵۰۰ وجود ownership نادرست است، بدین معنی که صاحب فایل به درستی نام گذاری نشده است البته کنترل پنل ها به صورت اتوماتیک زمانی که شما فایل و یا دایرکتوری را بر روی هاست خود میسازید بر اساس نام کاربری شما تعیین دسترسی میکنند ولی ممکن است در مواقعی این تغییرات دستی اعمال شده و باعث بروز خطای ۵۰۰ internal server error شوند که میتوانید آن را با مطرح کردن با میزبان خود رفع کنید و یا در صورت دسترسی به سرور توسط دستوراتی که در ادامه ذکر میکنیم آن را تغییر دهید.
دستور chmod برای تغییر permission فایلها و دایرکتوریها قابل استفاده هستش، ابتدا باید بدانید این اعداد بیانگر چه مواردی هستند.
۱
۲
۳
|
۴ = Read
۲ = write
۱ = execute
|
یعنی اگر شما بخواهید به یک فایل دسترسی فقط خواندن بدهید باید دستور زیر را وارد کنید.
۱
|
Chmod ۴۰۰ filename
|
خوب به همین منوال فایل و یا دایرکتوری که پرمیژن آن نادرست است را تصحیح کنید.
بررسی اسکریپتها
یکی دیگر از دلایل اصلی رخ داد این ارور، هنگام کار با اسکریپتهای perl و یا cgi خواهد هستش اگر نمیدانید اسکریپت چیست مقاله مربوط به آن را حتما مطالعه کنید.
در قدم اول بررسی کنید فایل مربوطه در مسیر درست و با نام صحیح قرار دارد یا خیر؟! برای مثال اسکریپت perl برای هندل شدن نیاز به ماژول perl بر روی سرور دارد. مطمئن شوید سرویس مربوطه بر روی سرور نصب باشد بدین منظور از دستور which perl استفاده کنید اگر خروجی برگرداند یعنی سرویس نصب بوده و مشکل این مورد نخواهد بود.
در قدم دوم بررسی کنید دسترسی script صحیح باشد برای این منظور از دستور ls –la استفاده کنید، بسیاری از اسکریپتها باید دارای پرمیژن ۷۵۵ باشند.
و همانطور که در بالا گفتیم باید Handler و یا راهانداز اسکریپت بر روی سرور نصب باشد برای مثال فایلهایی با پسوند py. از پایتون برای تفسیر و اجرا استفاده میکنند و وظیفه شما به عنوان مدیر سرور جهت رفع خطای ۵۰۰ internal server error این هستش که از نصب بودن پایتون بر روی سرور خود مطمئن شوید، کافی است عبارت python را در محیط ssh وارد کنید اگر خروجی دریافت نکردید و پیامی مبنی بر نصب نبودن این پکیج دریافت کردید باید آن را بر روی سرور خود نصب کنید تا خطای ۵۰۰ سرور شما رفع شود.
بررسی فایل htaccess. سرور
یکی دیگر از دلایل شایع بروز خطای ۵۰۰ internal server error اعمال تغییرات نادرست در فایل htaccess. بر روی هاست میباشد. این فایل که بسیار پرکاربرد بوده و میتوان گفت اکثر مدیران سایت با آن آشنایی دارند و از عملکرد آن به خوبی آگاه هستند و از آن مرتباً نیز استفاده میکنند همین امر ممکن است باعث بروز مشکلاتی شود.
در این مواقع شما اولین کاری که باید بکنید سریعاً تغییراتی که در این فایل لحاظ کردید را حذف کنید و اگر وبسایت شما به حالت اول برگشت خوب اون موقع میشه روی کدها و نحوه حل آنها حرف زد.
اگر دلیل بروز خطا اجرای اسکریپت باشد دلیل اصلی آن محدودیت اعمال شده توسط مدیر سرور برای جلوگیری از اجرای اسکریپتهای پرل و پایتون به منظور تامین امنیت سرور هستش، اگر ناگزیر هستید باید این مسئله را با مدیر سرور خود در میان بگذارید و اگر خود مسئول هستید کافی است در فایل htaccess. هاست خود کد زیر را قرار دهید.
۱
|
Options +ExecCGI
|
بعد فایل کانفیگ وب سرور خود را ویرایش کرده و اجازه اجرای این اسکریپتها را بدهید. خط مربوط به این کار را باید از حالت کامنت خارج کنید.
۱
|
AddHandler cgi–script .cgi .py .php .pl
|
اگر دلیل بروز خطا فراخوانی بک فایل با پسوندی نامشخص و ناشناخته هستش برای اینکه بتوانید آن را اجرا کنید باید از خاصیت ForceType استفاده کنید. برای مثال اگر بخواهیم فایلی را به عنوان فایل php اجرا کنیم میتوانیم از کد زیر در فایل htaccess. استفاده کنیم.
۱
|
ForceType application/x–httpd–php
|
چنانچه بر روی سرور شما خاصیت suexec فعال باشد استفاده از ForceType خود باعث بروز خطای ۵۰۰ internal server error خواهد شد، در این مورد خاص باید از SetHandler به شکل زیر جای آن استفاده کنیم.
۱
|
SetHandler application/x–httpd–php
|
اگر توسط مدیر سرور استفاده از FollowSymlinks محدود شده باشد و شمh بخواهید از آن در فایل htaccess. خود استفاده کنید قطعاً با خطای ۵۰۰ روبرو خواهید شد،در اغلب مواقع این مشکل با جایگزینی SymlinkIfOwnerMatches حل خواهد شد.
زمانی که شما یک بلاک را به درستی در htaccess. نبندید نیز باعث بروز این خطا میشوید. ابتدا باید به فایل رجوع کنید و خط مربوطه را ویرایش کنید، یادآور میشوم یافتن دلیل تمامی موارد آموزش داده شده فقط و فقط با بررسی فایل error_log بر روی سرور و یا هاست قابل شناسایی است.
محدودیت Timeout
در مواقعی نیز شما از اسکریپتی استفاده میکنید که برای اجرا، منابع زیادی را از شبکه و یا بستر اینترنت فراخوانی میکند و رندر کردن تمامی این پروسهها طولانی بوده و در صورتی که سرور شما به درستی کانفیگ نشده باشد و محدودیت Timeout کمتر از مقدار نیاز برای اجرای script باشد شما با خطای ۵۰۰ روبرو میشوید برای رفع این مشکل باید مراتب را به میزبان وب خود اطلاع دهید و اگر مدیر سرور هستید در فایل کانفیگ apache و فایل سراسری php.ini سرور این مورد را ویرایش کنید.