نحوه عیب یابی خطای رایج HTTP

امیرحسین بیگدلو 12 ماه قبل

 

 #  معرفی

هنگام دسترسی به وب سرور یا برنامه، هر درخواست HTTP که توسط سرور دریافت می شود با یک کد وضعیت HTTP پاسخ داده می شود. کدهای وضعیت HTTP کدهای سه رقمی هستند و در پنج کلاس مختلف گروه بندی می شوند. کلاس یک کد وضعیت را می توان با اولین رقم آن شناسایی کرد:

  • 1xx: اطلاعاتی
  • 2xx: موفق
  • 3xx: تغییر مسیر
  • 4xx: خطای کاربر
  • 5xx: خطای سرور

 

این مقاله بر شناسایی و عیب‌یابی متداول‌ترین کدهای خطای HTTP، یعنی کدهای وضعیت 4xx و 5xx، از دیدگاه مدیر سیستم تمرکز دارد. موقعیت‌های زیادی وجود دارد که می‌تواند باعث شود یک وب سرور به درخواستی با یک کد خطای خاص پاسخ دهد - ما دلایل و راه‌حل‌های بالقوه رایج را پوشش خواهیم داد.

 

دوره پیشنهادی: دوره آموزش Nginx

 

 #  خطاهای کاربر و سرور

خطاهای کلاینت، یا کدهای وضعیت HTTP از 400 تا 499، نتیجه درخواست های HTTP ارسال شده توسط کاربر (یعنی مرورگر وب یا سایر سرویس گیرندگان HTTP) است. حتی اگر این نوع خطاها مربوط به سرویس گیرنده هستند، اغلب مفید است که بدانید کاربر با کدام کد خطا مواجه است تا مشخص شود آیا مشکل بالقوه می تواند توسط پیکربندی سرور برطرف شود یا خیر.

 

خطاهای سرور، یا کدهای وضعیت HTTP از 500 تا 599، زمانی توسط وب سرور بازگردانده می شوند که متوجه شود خطایی رخ داده است یا در غیر این صورت قادر به پردازش درخواست نیست.

 

مقاله پیشنهادی: ویروس کامپیوتری چیست؟

 

 #  نکات عیب‌یابی کلی

 

 -  هنگام استفاده از مرورگر وب برای آزمایش سرور وب، پس از ایجاد تغییرات سرور، مرورگر را به‌روزرسانی کنید.

 

 -  گزارش های سرور را برای جزئیات بیشتر در مورد نحوه رسیدگی سرور به درخواست ها بررسی کنید. به عنوان مثال، سرورهای وب مانند Apache یا Nginx دو فایل به نام‌های access.log و error.log تولید می‌کنند که می‌توانند برای اطلاعات مرتبط اسکن شوند.

 

 -  به خاطر داشته باشید که تعاریف کد وضعیت HTTP بخشی از استانداردی است که توسط برنامه ای که درخواست ها را ارائه می دهد پیاده سازی می شود. این بدان معنی است که کد وضعیت واقعی که بازگردانده می شود بستگی به نحوه مدیریت یک خطای خاص توسط نرم افزار سرور دارد - این راهنما به طور کلی باید شما را در جهت درست راهنمایی کند.

 

اکنون که درک سطح بالایی از کدهای وضعیت HTTP دارید، به خطاهایی که معمولاً با آن‌ها مواجه می‌شوید نگاه می‌کنیم.

 

مقاله پیشنهادی: رایانش ابری چیست؟

 

 #  Bad Request 400

کد وضعیت 400 یا خطای درخواست بد، به این معنی است که درخواست HTTP که به سرور ارسال شده است دارای شکل نامعتبر است.

 

در اینجا چند نمونه از زمانی که ممکن است خطای 400 Bad Request رخ دهد آورده شده است:

  • کوکی کاربر که با سایت مرتبط است خراب است. پاک کردن کش و کوکی های مرورگر می تواند این مشکل را حل کند.
  • درخواست نادرست به دلیل مرورگر معیوب
  • درخواست نادرست به دلیل خطای انسانی هنگام تشکیل دستی درخواست‌های HTTP (مثلاً استفاده نادرست از curl)

 

مقاله پیشنهادی: پراکسی معکوس چیست؟

 

 #  Unauthorized 401

کد وضعیت 401 یا خطای غیر مجاز به این معنی است که کاربری که سعی در دسترسی به منبع دارد احراز هویت نشده است یا به درستی احراز هویت نشده است. این به این معنی است که کاربر باید اعتباری را ارائه دهد تا بتواند منبع محافظت شده را مشاهده کند.

 

یک سناریوی مثال که در آن یک خطای 401 Unauthorized برگردانده می‌شود، این است که کاربر سعی کند به منبعی دسترسی پیدا کند که با احراز هویت HTTP محافظت می‌شود. در این حالت، کاربر یک کد پاسخ 401 را دریافت می کند تا زمانی که یک نام کاربری و رمز عبور معتبر (یکی که در فایل htpasswd. وجود دارد) به سرور وب ارائه کند.

 

 

 #  Forbidden 403

کد وضعیت 403 یا خطای ممنوع به این معنی است که کاربر یک درخواست معتبر داده است اما سرور از ارائه درخواست خودداری می کند، زیرا اجازه دسترسی به منبع درخواستی را ندارد. اگر به طور غیرمنتظره ای با خطای 403 مواجه می شوید، چند دلیل معمولی وجود دارد که در اینجا توضیح داده شده است.

 

 +  File permission

خطاهای 403 معمولاً زمانی رخ می‌دهند که کاربری که فرآیند وب سرور را اجرا می‌کند، مجوز کافی برای خواندن فایلی که در حال دسترسی است را ندارد.

 

برای مثالی از عیب یابی خطای 403، وضعیت زیر را در نظر بگیرید:

  • کاربر در تلاش برای دسترسی به فایل index وب سرور، از http://example.com/index.html است.
  • فرآیند کارگر وب سرور متعلق به کاربر www-data است.
  • در سرور، فایل index در /usr/share/nginx/html/index.html قرار دارد.

 

اگر کاربر خطای 403 Forbidden دریافت می کند، اطمینان حاصل کنید که کاربر www-data دارای مجوزهای کافی برای خواندن فایل است. به طور معمول، این بدان معنی است که سایر مجوزهای فایل باید برای خواندن تنظیم شوند. راه های مختلفی برای اطمینان از این موضوع وجود دارد، اما دستور زیر در این مورد کار خواهد کرد:

sudo chmod o=r /usr/share/nginx/html/index.html

 

 

 +  htaccess

یکی دیگر از دلایل احتمالی خطاهای 403، اغلب به عمد، استفاده از فایل htaccess است. برای مثال، از فایل htaccess می توان برای ممانعت از دسترسی برخی منابع به آدرس های IP خاص یا محدوده استفاده کرد. اگر کاربر به طور غیرمنتظره ای خطای 403 Forbidden دریافت کرد، مطمئن شوید که این خطا توسط تنظیمات htaccess. شما ایجاد نشده است.

 

 

 +  index file does not exists

اگر کاربر بخواهد به دایرکتوری دسترسی پیدا کند که فایل ایندکس پیش‌فرض ندارد و فهرست‌های دایرکتوری فعال نباشد، وب سرور خطای 403 Forbidden را برمی‌گرداند. به عنوان مثال، اگر کاربر بخواهد به http://example.com/emptydir/ دسترسی پیدا کند و هیچ فایل فهرستی در پوشه خالی سرور روی سرور وجود نداشته باشد، وضعیت 403 برگردانده می شود. اگر می‌خواهید فهرست دایرکتوری‌ها فعال شوند، می‌توانید این کار را در پیکربندی وب سرور خود انجام دهید.

 

مقاله پیشنهادی: ارور 404 چیست و چطور آن را برطرف کنیم؟ همراه با چند نمونه خلاقانه

 

 #  Not Found 404

کد وضعیت 404 یا خطای پیدا نشد، به این معنی است که کاربر می تواند با سرور ارتباط برقرار کند اما نمی تواند فایل یا منبع درخواستی را پیدا کند.

 

خطاهای 404 می توانند در موقعیت های مختلف رخ دهند. اگر کاربر به طور غیرمنتظره ای خطای 404 Not Found را دریافت کرد، در اینجا چند سوال در هنگام عیب یابی مطرح می شود:

  • آیا لینکی که کاربر را به منبع سرور شما هدایت کرده است دارای خطای نگارشی است؟
  • آیا کاربر URL را اشتباه تایپ کرده است؟
  • آیا فایل در محل صحیح سرور وجود دارد؟ آیا منبع در سرور منتقل شده یا حذف شده است؟
  • آیا پیکربندی سرور دارای محل ریشه سند صحیح است؟
  • آیا کاربری که مالک فرآیند کارگر وب سرور است، دارای امتیازاتی است که به دایرکتوری که فایل درخواستی در آن است، برود؟ (نکته: دایرکتوری ها برای دسترسی به مجوزهای خواندن و اجرا نیاز دارند)
  • آیا دسترسی به منبع symbolic link است؟ اگر چنین است، مطمئن شوید که وب سرور برای دنبال کردن symbolic link پیکربندی شده است.

 

 

 #  Internal Server Error 500

کد وضعیت 500 یا خطای سرور داخلی به این معنی است که سرور به دلیل نامعلومی نمی تواند درخواست را پردازش کند. گاهی اوقات این کد زمانی ظاهر می شود که خطاهای خاص 5xx مناسب تر باشد. شایع ترین علت این خطا، پیکربندی نادرست سرور (به عنوان مثال یک فایل htaccess. نادرست) یا بسته های از دست رفته (مثلاً تلاش برای اجرای یک فایل PHP بدون نصب صحیح PHP) است.

 

 

 #  Bad Gateway 502

کد وضعیت 502 یا خطای Bad Gateway به این معنی است که سرور یک دروازه یا سرور پروکسی است و پاسخ معتبری از سرورهای backend دریافت نمی کند که در واقع باید درخواست را انجام دهد.

 

اگر سرور مورد نظر یک سرور پروکسی معکوس است، مانند یک متعادل کننده بار، در اینجا چند چیز وجود دارد که باید بررسی شود:

  • سرورهای backend (جایی که درخواست های HTTP به آن ها ارسال می شود) سالم هستند.
  • پراکسی معکوس به درستی پیکربندی شده است و backendهای مناسب مشخص شده است.
  • اتصال شبکه بین سرورهای backend و سرور پروکسی معکوس سالم است. اگر سرورها می توانند روی پورت های دیگر ارتباط برقرار کنند، مطمئن شوید که فایروال اجازه ترافیک بین آنها را می دهد.
  • اگر برنامه وب شما برای گوش دادن در سوکت پیکربندی شده است، اطمینان حاصل کنید که سوکت در مکان صحیح وجود دارد و مجوزهای مناسب را دارد.

 

دوره پیشنهادی: دوره آموزش لینوکس

 

 #  Service Unavailable 503

کد وضعیت 503 یا خطای Service Unavailable به این معنی است که سرور بیش از حد بارگیری شده است یا تحت تعمیر و نگهداری است. این خطا به این معنی است که سرویس باید در نقطه ای در دسترس قرار گیرد. اگر سرور تحت تعمیر نیست، این می تواند نشان دهد که سرور به اندازه کافی CPU یا منابع حافظه برای رسیدگی به تمام درخواست های دریافتی ندارد، یا اینکه وب سرور باید پیکربندی شود تا به کاربران، رشته ها یا فرآیندهای بیشتری اجازه دهد.

 

 

 #  Gateway Timeout 504

کد وضعیت 504 یا خطای Gateway Timeout به این معنی است که سرور یک سرور دروازه یا پروکسی است و در بازه زمانی مجاز پاسخی از سرورهای باطن دریافت نمی کند.

 

این معمولاً در شرایط زیر رخ می دهد:

  • اتصال شبکه بین سرورها ضعیف است.
  • سرور backend که درخواست را انجام می دهد به دلیل عملکرد ضعیف بسیار کند است.
  • مدت زمان پایان دروازه یا سرور پراکسی بسیار کوتاه است.

 

دوره مرتبط: دوره آموزش shell scripting

 

 #  نتیجه گیری

اکنون که با رایج ترین کدهای خطای HTTP و راه حل های رایج برای آن کدها آشنا شده اید، باید مبنای خوبی برای عیب یابی مشکلات سرورهای وب یا برنامه های خود داشته باشید.

 

مطالب مشابه



مونگارد