آپاچی؛ شب ۹: لاگها، reload و تشخیص ۴۰۳ تا ۵۰۳
فهرست نوشته
وقتی مرورگر فقط «باز نمیشود» میگوید، باید شاهد جمع کنیم. امشب درخواست، کد پاسخ، میزبان انتخابشده و error log را به هم وصل میکنیم.
این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نامها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.
محیط: دو سایت شب ششم؛ لاگهای مستقل میزبان www.
درخواست را قابل ردیابی کن#
داخل VirtualHost قالب آزمایشگاهی زیر را جایگزین CustomLog قبلی کن؛ مسیر RHEL را طبق راهنما تغییر بده:
LogFormat "%v %a %{c}a %t \"%r\" %>s %b %D" lab
CustomLog /var/log/apache2/www-access.log lab
LogLevel warn
%v نام میزبان، %a آدرس کلاینت، %{c}a همتای اتصال و %D زمان رسیدگی به میکروثانیه است. اختلاف دو آدرس در شب بیستوسوم مهم میشود. رشتهٔ درخواست ممکن است query محرمانه داشته باشد؛ در برنامهٔ واقعی token را در URL قرار نده و سیاست نگهداری لاگ داشته باش.
sudo "$APACHE_CTL" -t
sudo systemctl reload "$APACHE_SERVICE"
sudo journalctl -u "$APACHE_SERVICE" -n 30 --no-pager
curl -i --resolve www.example.test:80:192.168.56.10 \
http://www.example.test/missing-lab-file
sudo tail -n 20 "$APACHE_LOG/www-access.log" "$APACHE_LOG/www-error.log"
از .30 برای RHEL استفاده کن. باید برای مسیر ناموجود 404 ثبت شود. نبودن error log برای هر 404 عادی است؛ access log شاهد پاسخ است. -t سالم، موفقیت reload یا درست بودن برنامه را اثبات نمیکند؛ هر سه مرحله را بررسی کن.
تفسیر خطا#
403 معمولاً مجوز یا policy، 404 مسیر یا routing، 502 مشکل پاسخ upstream و 503 نبودن ظرفیت یا backend قابل استفاده را مطرح میکند؛ اینها سرنخاند، علت قطعی از لاگ به دست میآید. Timeout پیش از پاسخ HTTP میتواند مشکل شبکه باشد.
تمرین و بازگشت: برای یک درخواست، LogLevel را موقتاً debug کن، شاهد بگیر و به warn برگردان. لاگ پرجزئیات دائمی میتواند دیسک و دادهٔ خصوصی را درگیر کند. فایل پیکربندی سالم را بازیابی و پاسخ اصلی را دوباره بررسی کن.
منبع: راهنمای لاگ Apache ، mod_log_config .