Apache HTTPD / أسس هوية الطلب والإعداد / الدرس 6
سجلات الوصول والخطأ وأدلة الطلب المحدودة
اربط الرد بالموقع والحد الفاشل دون حمولة حساسة.
في هذه الصفحة
أهداف الدرس
- تمييز ملخص الوصول وتشخيص الخطأ.
- تفسير الحالة النهائية ووحدة الوقت في صيغة معلنة.
يجيب السجل عن سؤال محدد
يلخص الوصول طلباً وفق صيغته ويحتفظ الخطأ بتشخيص وفق مستواه. ليس أيهما تتبعاً كاملاً أو إثبات نجاح العمل. صل المضيف وعنوان العميل والطريقة والمسار والنهائي والتوقيت بالخطأ. قد يسبق Apache وسيط فيحتاج العنوان والمخطط الأصليان عقد ثقة. لا يثبت سطر واحد أن المسار الذي قصده العميل هو نفسه الذي رآه الخادم بعد إعادة الكتابة، لذلك يجب أن تختار الحقول بما يجيب سؤال التحقيق فعلاً لا بما يسهل جمعه فقط.
اختر حقولاً لغرض وحد إفشاء
يعلن المقطع صيغة ومسارات افتراضية ويحتاج log_config. يسجل %v اسم المضيف القانوني و%a عنوان الطلب و%>s النهائي و%D الوقت بالميكروثانية وفق المرجع. تحذف %U الاستعلام لكن قد يحمل المسار معرفاً حساساً. ليست صيغة إنتاج عامة أو عزل زمن الخلفية. لا ينشأ ملف ولا يحمل إعداد. يحتاج الواقع سياسة وصول واحتفاظ للملفات كما يحتاج دقة الوحدات، ولا تعني إزالة الاستعلام أن كل قيمة متبقية آمنة للنشر في تقرير عام.
LogFormat "%v %a %m %U %>s %D" parcel_review
CustomLog "logs/parcel-access.log" parcel_review
ErrorLog "logs/parcel-error.log"
تعتمد المسارات على ServerRoot والمنصة. لا ينتج طلب أو ملف ولا تتغير أذونات، ولا يثبت المقطع احتفاظاً أو وصولاً.
فسر الطبقة قبل تسمية السبب
تدل 403 على رد رفض بأسباب متعددة، وقد تأتي 404 من الربط أو التطبيق أو موقع آخر. تحتاج 502 و504 حدود الوكالة والخلفية. لا تساو كل خطأ بتوقف أو 200 بالمحتوى الصحيح. احفظ الطريقة والمسار والاسم والتفاصيل المحدودة. قد يغير redirect أو معالج الخطأ الحالة النهائية عن مرحلة سابقة. يهم لذلك استخدام الحقل النهائي المقصود في الصيغة، وعدم جمع عدادات ذات معان مختلفة ثم وصفها كمعدل واحد لصحة التطبيق دون تفسير.
حلل السجل الافتراضي المقيد فقط
يفصل البرنامج الكامل سطراً مقيداً ويستخرج النهائي ويحول الوقت. ليس محللاً عاماً؛ تحتاج المسافات والهروب والحقول المختلفة معالجة. لا يقرأ ملفاً ولا بيانات عميل حقيقية. تضخم قراءة الميكروثانية كميلي ثانية الزمن ألف مرة. لا تختبر العملية صيغة Apache أو توقيت جهاز؛ تفحص حساباً على ستة حقول معلنة. يوضح التصريح بالقيود لماذا لا يصلح split البسيط لأداة تشغيل تتعامل مع أي سطر قد تنتجه صيغة أخرى أو طلب غير معتاد.
line = "parcel.example.invalid 192.0.2.10 GET /docs/ 403 1200"
site, address, method, path, status, micros = line.split()
print(site, int(status))
print(f"{int(micros) / 1000:.1f} ms")
parcel.example.invalid 403
1.2 ms
العنوان والاسم تعليميان. يدعم المثال ستة حقول فقط ولا يفحص سجلًا أو نشاط شبكة.
تحتاج زيادة التسجيل سبباً محدوداً
قد تكشف الترويسات والكوكيز والاستعلام والجسم والأخطاء أسراراً أو بيانات شخصية، وتضاعف مستويات التتبع الحجم والتعرض. راجع الوصول والاحتفاظ والتنقيح والفرضية قبل الزيادة. احفظ أول فشل لا البيئة كلها. فشل قناة السجل عيب رصد مستقل لا يمحو نتيجة التطبيق. طابق الوقت والحالة مع المستخدم قبل إغلاق التعافي. لا يعني غياب السطر غياب الطلب دائماً؛ قد يكون النطاق أو التصفية أو نشر السجل هو الذي أخفق، ويجب إبقاء هذا الاحتمال مرئياً في التشخيص.
الأخطاء الشائعة وإصلاحها
يُعد 200 إثبات رد Parcel الصحيح.
- لماذا يحدث؟
- حل نجاح الحالة محل المحتوى والعمل.
- كيف تصلحه؟
- افحص الموقع والمعالج والمعنى والمستخدم.
- كيف تتجنب تكراره؟
- حدد نجاحاً يتجاوز الرمز.
تُقرأ %D بالميلي ثانية.
- لماذا يحدث؟
- أُهملت وحدة الميكروثانية.
- كيف تصلحه؟
- حول صراحة وقارن وحدات مكافئة.
- كيف تتجنب تكراره؟
- احفظ تعريف الحقل والوحدة مع التحليل.
تسجل الترويسات والاستعلامات كاملة روتينياً.
- لماذا يحدث؟
- تجاوز الجمع الفرضية وكشف الحساس.
- كيف تصلحه؟
- احفظ الأدنى المنقح ونسق الاستجابة عند الإفشاء.
- كيف تتجنب تكراره؟
- راجع التفصيل والوصول والاحتفاظ أولاً.
اختبر فهمك
1. بلغ %D الافتراضي 1200. ماذا يطبع النموذج؟
اعرض الحل المشروح
1.2 ميلي ثانية لأن الألف ميكروثانية تساوي واحدة. الحساب على بيانات تعليمية لا قياس طلب حقيقي.
2. ظهر 404 للمسار. ماذا تثبت قبل إضافة ملف؟
اعرض الحل المشروح
أثبت المضيف والربط والمعالج والوسيط وتوجيه التطبيق والتشخيص. الملف الغائب فرضية واحدة. قد يخفي وضع ملف في شجرة خاطئة عيب التوجيه بدلاً من إصلاحه.
أهم ما تعلمته
- للحقل والحالة والتوقيت معنى وحدود.
- اجمع الأدنى الآمن الذي يميز الحد الفاشل.