زمانی که به یک سایت (سرور) و یا برنامه ای دسترسی پیدا می کنید، تمامی درخواست های HTTP که توسط یک سرور دریافت می شود توسط یک کد وضعیت پاسخ داده می شوند، این کدهای وضعیت سه رقمی می باشند که به 5 بخش مختلف تقسیم می شوند، هر بخش از این کدها، توسط اولین شماره از سمت چپ قابل تشخیص می باشند که در زیر آمده است :
1xx: Informational (اطلاعاتی)
2xx: Success (موفق)
3xx: Redirection (انتقال)
4xx: Client Error (خطای کاربری)
5xx: Server Error (خطای سروری)
در این آموزش قصد داریم که بروی نحوه شناسایی و رفع مشکلات رایج مربوط به این کدهای تمرکز نماییم و همچنین عواملی که باعث تولید آنها می شوند را مورد بررسی قرار دهیم.
مروری بر خطای های رایج کاربری و سروری (Client Errors and Server Errors)
کدهایی که مشخص کننده خطای های کاربری می باشند، از شماره 400 شروع و به 499 ختم می شوند؛ این وضعیت، نتیجه درخواست های ارسالی توسط کاربران می باشد به عنوان مثال باز کردن یک سایت توسط مروگر و یا درخواست های دیگری که توسط کاربران ارسال می شود. با توجه به اینکه این وضعیت نشان دهنده مشکلی در سمت کاربر می باشد، با این حال این موارد جهت تشخیص مشکلات کاربر می باشند و یک مدیر سرور می تواند با دانستن آن تغییراتی در پیکربندی سرور در جهت رفع آنها ایجاد نماید.
کدهای مختص به خطای های سروری از 500 تا 599 می باشند و توسط وب سرور زمانی که با یک خطا در هنگام اجرای درخواست ارسال شده مواجه می شود و یا درخواست ارسال شده توسط وب سرور قابل پردازش نمی باشد، تولید می شوند.
نکته هایی برای عیب یابی مشکلات :
- زمانی که از یک مروگر برای تست یک وبسرور استفاده می کنید، پس از ایجاد تغییرات در کانفیگ سرور و یا وب سرور لازم است که صفحه مرور شده را مجدد بروز رسانی (Refresh)نمایید.
- برای اطلاعات بیشتر در مورد نحوه مدیریت درخواست ها (از جمله پیغام های سیستمی و وب سرور) لازم است که لاگ های سرور (Server Logs) را مورد بررسی قرار دهید، به عنوان مثال وب سرور هایی نظیر Apache و Nginx برای لاگ های خود دو عدد فایل به نام های access.log و error.log ایجاد می کنند که می توان برای اطلاعات بیشتر به انها رجوع کرد، همانطور که از اسم آنها مشخص است، فایل access.log شامل مجموعه درخواست هایی مرور لینک های یک سایت و فایل error.log شامل خطاهایی که وب سرور با آن مواجه می شود، می باشند.
- در نظر داشته باشید که این کد های وضعیت بستگی به نوع کانفیگ و نرم افزاری که درخواست های HTTP را کنترل میکنند ، دارد بدین منظور که این موارد به صورت استاندارد می باشند و قابل تغییر می باشند.
اینک با توجه به اطلاعات بالا وقت آن رسیده است که نگاهی به خطاهای رایجی که کاربران ممکن است با آن مواجه شوند، بیاندازیم.
وضعیت 400 درخواست ناصحیح (Bad Request )وضعیت 400 و به عبارت دیگر درخواست ناصحیح : درخواست HTTP ارسال شده به سرور دارای نگارش ناصحیح (syntax Error)می باشد.در اینجا به چند مثال رایج که موجب بروز خطای 400 می شوند می پردازیم :
- کوکی های کاربر(The user’s Cookie) که مرتبط با سایت مورد نظر است مخدوش می باشند، ممکن است با خالی کردن کش و کوکی(Cache and Cookies) مرورگر، این مشکل برطرف شود.
- درخواست ناقص که از طریق یک مروگر معیوب و خراب ارسال شده باشد.
- درخواست ناقص ناشی از خطای انسانی زمانی که درخواست های HTTP به صورت دستی شکل گرفته اند، مانند استفاده از کتابخانه Curl .
وضعیت 401، دسترسی غیر مجاز (Unauthorized)وضعیت 401 و یا دسترس غیر مجاز : کاربر مورد نظر اجازه دسترسی به موارد خواسته شده را ندارد به عبارت دیگر کاربر تایید نشده است و یا روند تایید آن صحیح نمی باشد، کاربر برای دسترسی باید نام کاربری و رمز عبور را به درستی وارد نماید، تا بتواند منابع محافظت شده را مشاهده کند.مثالی که در این باره می توان زد این است که اگر کاربری بخواهد به یک سایت که توسط اعتبار سنجی HTTP محافظت میشود ، دسترسی پیدا کند در صورتی که نام کاربری و رمز عبور خود را وارد ننماید خطای 401 Unauthorized را دریافت خواهد کرد، از این رو ، لازم است که از نام کاربری و رمز عبوری که در فایل .htpasswd موجود است، استفاده نمایید. در نظر داشته باشید که پسورد در این گونه فایل ها کد شده می باشد. به عنوان مثال می توان به سایت های دانلود فیلم اشاره کرد ☺
وضعیت 403، ممنوع (Forbidden)
کد وضعیت 403 و یا خطای ممنوعه : کاربر درخواست صحیح ارسال میکند اما سرور آن درخواست را به دلیل نبود دسترسی مجاز به منابع درخواست شده رد می کند، اگر شما با خطای 403 به صورت غیر منتظرانه برخورد می کنید ، این امر ممکن است به یکی از دلایلی که در زیر توضیح داده شده است، مرتبط باشد :1-سطح دسترسی فایل (File Permissions)به طور معمول خطای 403 بیشتر زمانی رخ میدهد، که کاربری که پروسه وب سرور را اجرا می کند ( در سیستم های لینوکسی معمولا apache, access,nobody کاربران رایج سیستمی می باشند که وب سرور را در سرور اجرا می کنند) دسترسی لازم به فایل درخواست شده توسط یک کاربر دیگر را ندارد. معمولا فایل مورد نظر دسترسی خواندن توسط وب سرور را ندارد، لذا کاربران هنگام مشاهده این فایل توسط یک مرورگر با این خطا مواجه خواهند شد.
برای نمونه می توانید موقعیت زیر را جهت عیب یابی یک خطای 403 فرض نمایید :
- یک کاربر درخواست خود را جهت دسترسی به محتوای http://example.com/index.html به وب سرور ارسال می کند.
- مالکیت این فرایند در سطح سیستمی کاربری به نام www-data می باشد
- در داخل سرور فایل index.html در مسیر زیر قرار دارد : usr/share/nginx/html/index.html
کاربر این سایت را باز میکند و خطای 403 Forbidden دریافت می کند! ابتدا مطمئن شوید که کاربر سیستمی www-data دسترسی لازم برای خواندن این فایل را داشته باشد، در لینوکس دسترسی فایل های به صورت معمول بروی 644 و فولدر های 755 می باشند، به عنوان مثال شما می توانید از طریق دستور ls –la سطح دسترسی یک فایل و یا فولدر را بررسی نمایید، در این مثال ما به گروه Other و یا دیگران دسترسی خواندن می دهیم تا کاربر www-data بتواند به فایل دسترسی پیدا کند.
sudo chmod o=r /usr/share/nginx/html/index.html
هر فایل شامل 3 سطح دسترسی می باشد، مالک فایل یا User، گروه فایل یا Group و در انتها Others یا دیگران
-------r—
2-.htaccess یکی دیگر از احتمالاتی که باعث بروز خطای 403 می شود، استفاده از کدها (rules) مربوط به وب سرور جهت مسدود سازی دسترسی کاربران به یک یا چند فایل می باشد، بدین منظور مدیر سرور و یا مالک وبسایت می تواند از این گونه کد ها در فایل .htaccess استفاده نماید تا دسترس کاربران را مسدود کند.
-3 فایل index وجود ندارد ((Index File Does Not Exist
اگر کاربری بخواهد محتوای یک پوشه سایتی را مشاهده کند که فاقد index باشد، در صورتی که امکان directory listening فعال نباشد، وب سرور خطای 403 Forbidden را نمایش می دهد.به عنوان مثال اگر کاربری بخواهد به محتوای http://example.com/emptydir/ دسترسی پیدا کند و در پوشه emptydir فایل index وجود نداشته باشد، کاربر با خطای 403 مواجه خواهد شد.
وضعیت 404، پیدا نشد) ( Not Found
کد وضعیت 404 و یا خطای پیدا نشد (Not Found) : کاربر قادر به ارتباط با سرور می باشد اما قادر به شناسایی موقعیت و مکان فایل درخواستی توسط وبسرور نیست.خطای 404 ممکن است به دلایل مختلف رخ دهد. اگر کاربری به صورت غیر منتظرانه خطای 404 Not Found دریافت می کند در زیر نمونه سوالاتی است که می توانید در هنگام عیب یابی مطرح نمایید: - آیا لینکی که کاربران را به سرور شما هدایت می کند دارای غلط نوشتاری می باشد ( صحیح می باشد) ؟
- آیا فایل در مکان درخواست شده، موجود می باشد؟ ایا منابع درخواستی پاک شده و یا انتقال داده شده اند؟
- آیا در تنظیمات سرور مکان و موقعیت document root به درستی وارد شده است؟
- آیا کاربر که مالک فرایند و پروسه مرتبط با وبسرور(Web Server Worker Process) می باشد، دسترسی عبور از پوشه های که فایل مورد نظر درخواست شده را دارد؟
- آیا فایل درخواستی از طریق یک Symbolic link قابل دسترس است ؟ اگر بدین صورت می باشد پس مطمئن شوید که قابلیت follow symbolic links برای وبسرور فعال باشد
وضعیت 500، خطای داخلی سرور (Internal Server Error)
وضعیت کد 500 و یا خطای داخلی : سرور قادر به پردازش درخواست مورد نظر به دلیل نامعلوم نمی باشد. بیشترین دلیلی که منجر به بروز این خطا می شود، پیکربندی ناصحیح سرور است، به عنوان مثال فرمت ناصحیح فایل .htaccess و یا نبود بسته (Package) مرتبط با وبسرور جهت پردازش صحیح درخواست ها.
وضعیت 502، گذرگاه ناصحیح (Bad Gateway)وضعیت کد 502 و یا خطای Bad Gateway : سرور مورد دسترسی، یک گذرگاه ( Gateway ) و یا پراکسی سرور (***** Server) می باشد، و این سرور پاسخ درستی از سرورها زیر مجموعه خود (Backend Servers) دریافت نمی کند، در واقع سرور های Backend مسئولیت اجرای درخواست ها و ارسال آنها به سرور گذرگاه (Gateway) را بر عهده دارند.اگر سرور مورد نظر شما یک سرور Reverse ***** مانند Load balancer می باشد، در اینجا چند چیز است که لازم است بررسی شوند:
- سرورهای اصلی ( Backend servers ) که درخواست های HTTP در حال ارسال می باشند، فاقد مشکل باشند.
- سرور پراکسی به صورت صحیح با Backends مشخص و صحیح پیکربندی شده است.
- ارتباط بین سرور های Backends و ***** server سالم باشد. اگر سرورها قادر به ارتباط از طریق Port دیگری می باشند، مطمئن شوید که فایروال سرور اجازه دسترسی بین آن ها را داده است.
- اگر برنامه وب شما، به صورتی پیکربندی شده است که از طریق یک سوکت (Socket) ارتباط دارد، مطمئن شوید که سوکت مورد نظر در مکان صحیح وجود دارد و دارای سطح دسترسی صحیح می باشد.
وضعیت 504، عدم دسترسی به گذرگاه (Gateway Timeout)
کد وضعیت 504 یا خطای Gateway timeout : سرور یک ***** و Gateway می باشد و امکان دریافت پاسخ از سرور های Backend در زمان مشخص شده، ندارد، به عبارتی سرور های Backend در دسترس نمی باشند.
این مشکل اغلب در موقعیت های زیر رخ می دهد :
- ارتباط بین سرور ها ضعیف می باشد.
- سرور backend درخواست ها دریافتی را با سرعت کمی پردازش می کند که این به دلیل ضعف و یا کمبود منابع سرور می باشد.
- مدت زمان پاسخ درخواست ها و دریافت آن توسط Gateway و یا ***** server کوتاه تنظیم شده است.