سجلات وصول Nginx: معنى كل حقل وكيفية تحليلها
تسجّل سجلات وصول Nginx كل طلب يتعامل معه خادم الويب الخاص بك. وهي أول مكان تبحث فيه عند تصحيح أخطاء 404، أو تتبع نقاط النهاية البطيئة، أو التحقيق في حركة مرور مشبوهة. ومع ذلك، يتصفح العديد من المطورين أسطر السجل الخام دون فهم كامل لكل حقل. يشرح هذا الدليل تنسيق سجل Nginx الافتراضي، ويوضح كيفية تخصيصه، ويستعرض تقنيات تحليل عملية باستخدام أدوات سطر الأوامر القياسية.
تنسيق سجل وصول Nginx الافتراضي
بشكل افتراضي، يستخدم Nginx تنسيق السجل combined، الذي يبدو هكذا:
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
سطر سجل نموذجي:
192.0.2.1 - - [10/Oct/2023:13:55:36 +0000] "GET /api/users HTTP/1.1" 200 1234 "https://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
شرح كل حقل على حدة
| الحقل | المتغير | الوصف |
|---|---|---|
| عنوان العميل | $remote_addr | عنوان IP للعميل الذي أرسل الطلب. |
| مستخدم العميل | $remote_user | اسم المستخدم إذا تم استخدام مصادقة HTTP؛ وإلا -. |
| الوقت المحلي | $time_local | وقت الخادم المحلي بتنسيق [day/month/year:hour:minute:second zone]. |
| الطلب | $request | سطر الطلب الكامل: الطريقة والمسار وبروتوكول HTTP. |
| الحالة | $status | رمز حالة استجابة HTTP (مثل 200، 404، 500). |
| بايتات الجسم المُرسلة | $body_bytes_sent | حجم جسم الاستجابة بالبايت، باستثناء الترويسات. |
| المرجع | $http_referer | الصفحة التي ربطت إلى الطلب (إذا وفّرها العميل). |
| وكيل المستخدم | $http_user_agent | سلسلة برنامج العميل (متصفح، بوت، أداة). |
تخصيص تنسيق السجل
يمكنك تعريف تنسيقك الخاص لالتقاط تفاصيل إضافية مثل زمن الطلب، أو زمن استجابة upstream، أو نسبة gzip. أضف توجيه log_format في كتلة http وارجع إليه في access_log.
http {
log_format detailed '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'rt=$request_time uct="$upstream_connect_time" '
'uht="$upstream_header_time" urt="$upstream_response_time"';
access_log /var/log/nginx/access.log detailed;
}
متغيرات إضافية شائعة:
$request_time– الوقت الإجمالي من استلام أول بايت حتى إرسال آخر بايت.$upstream_response_time– الوقت المستغرق في انتظار upstream (مثل PHP-FPM، Node.js).$gzip_ratio– نسبة الضغط إذا كان gzip مفعّلاً.$http_x_forwarded_for– عنوان IP الأصلي للعميل عند وجوده خلف بروكسي أو موازن تحميل.
تحليل سجلات Nginx بأدوات سطر الأوامر
لا تحتاج إلى برامج باهظة الثمن لاستخراج الرؤى. الأدوات القياسية في Unix مثل grep وawk وsort وuniq قوية بما يكفي لمعظم المهام.
1. إيجاد عناوين IP الأكثر تكراراً
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
يساعد هذا في تحديد المصادر كثيفة الاستخدام أو مصادر هجمات DDoS المحتملة.
2. تحديد أكثر عناوين URL المطلوبة
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
مفيد لفهم المحتوى الشائع أو اكتشاف أنماط غير معتادة.
3. إحصاء رموز حالة HTTP
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
اطّلع بسرعة على عدد أخطاء 404 أو 500 التي تحدث.
4. إيجاد الطلبات ذات أزمنة الاستجابة البطيئة
إذا أضفت $request_time إلى تنسيق سجلك، يمكنك تصفية الطلبات البطيئة:
awk '{ if ($NF > 1) print }' /var/log/nginx/access.log
عدّل الحد (ثانية واحدة هنا) حسب الحاجة.
5. اكتشاف وكلاء المستخدم المشبوهين
awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
ابحث عن بوتات ضارة معروفة أو عملاء غير معتادين.
حالات استخدام عملية
- استكشاف الأخطاء: اربط أخطاء 500 بنقاط نهاية محددة أو أزمنة استجابة upstream.
- ضبط الأداء: حدّد الصفحات البطيئة وحسّن استعلامات قاعدة البيانات أو التخزين المؤقت.
- مراقبة الأمان: اكتشف محاولات القوة الغاشمة (العديد من 401/403 من نفس IP) أو أنماط حقن SQL في عناوين URL.
- تخطيط السعة: تتبّع حجم الطلبات بمرور الوقت لتوقّع احتياجات التوسع.
أتمتة التحليل باستخدام محلّلات السجلات
بينما تعمل أوامر سطر الأوامر أحادية السطر للاستعلامات العارضة، تستفيد التقارير المنتظمة من أدوات مخصصة. يمكنك استخدام محلّلات سجلات مفتوحة المصدر مثل GoAccess أو AWStats، أو بناء نصوص برمجية مخصصة. للتحليل السريع عبر المتصفح دون تثبيت أي شيء، يتيح لك Nginx Log Analyzer لصق أسطر السجل والحصول على ملخصات فورية لرموز الحالة وأهم عناوين IP والمسارات المطلوبة.
أفضل الممارسات لإدارة السجلات
- دوّر السجلات بانتظام: استخدم
logrotateلمنع مشكلات مساحة القرص. - مركزة السجلات: أرسلها إلى نظام إدارة سجلات (مثل ELK أو Graylog) للتخزين والبحث طويل الأمد.
- ضمّن معرّفات الطلبات: أضف
$request_idللربط مع سجلات التطبيق. - احترم الخصوصية: أخفِ هوية عناوين IP إذا كان ذلك مطلوباً بموجب GDPR أو لوائح أخرى.
الأسئلة الشائعة
ما الفرق بين سجلات الوصول وسجلات الأخطاء في Nginx؟
تسجّل سجلات الوصول كل طلب يتعامل معه Nginx، بما في ذلك عنوان IP للعميل وطريقة الطلب ورمز الحالة ووكيل المستخدم. أما سجلات الأخطاء فتلتقط رسائل تشخيصية حول مشكلات الخادم، مثل الاتصالات الفاشلة أو أخطاء التهيئة أو مهل upstream. كلاهما ضروري لسيناريوهات استكشاف أخطاء مختلفة.
كيف يمكنني رؤية عنوان IP الحقيقي للعميل عندما يكون Nginx خلف موازن تحميل؟
عندما يكون Nginx خلف بروكسي أو موازن تحميل، يُظهر $remote_addr عنوان IP الخاص بالموازن. لتسجيل عنوان IP الأصلي للعميل، اضبط وحدة real_ip لتثق بعنوان IP الخاص بالموازن واستخدم $http_x_forwarded_for أو $realip_remote_addr في تنسيق سجلك.
هل يمكنني تحليل سجلات Nginx دون تثبيت برامج؟
نعم. يمكنك استخدام أوامر Unix القياسية مثل grep وawk وsort مباشرة في الطرفية. للمقاربة الرسومية عبر المتصفح، توفّر الأدوات عبر الإنترنت مثل Nginx Log Analyzer رؤى سريعة دون أي تثبيت.
هل أنت مستعد للتعمق في سجلاتك؟ جرّب Nginx Log Analyzer لتحليل سجلات وصولك وعرضها بصرياً في ثوانٍ—دون الحاجة إلى أي إعداد.