وقتی سایت باز نمی‌شود باید تشخیص بدهیم خطا از listener، انتخاب سایت، مسیر فایل یا برنامه است. امشب لاگ را با پاسخ واقعی مرتبط می‌کنیم.

این جلسه بخشی از دورهٔ انجین‌اکس در ۵۰ شب است. قرارداد آزمایشگاه، مسیرها و روال اعمال تغییر در راهنمای دوره آمده است.

محیط: www فعال؛ HTTP_LAB در context http خوانده می‌شود.

قالب بدون ثبت راز#

در HTTP_LAB:

log_format lab '$host $remote_addr [$time_local] "$request_method $uri" '
               '$status $body_bytes_sent rt=$request_time '
               'up=$upstream_addr us=$upstream_status urt=$upstream_response_time';

این قالب query string را ثبت نمی‌کند، ولی مسیر هم ممکن است شناسهٔ حساس داشته باشد. Authorization و cookie را اضافه نکن. در server سایت access_log /var/log/nginx/www-access.log lab; بگذار. مقادیر upstream برای فایل ثابت خالی یا خط تیره‌اند.

sudo nginx -t
sudo systemctl reload nginx
sudo journalctl -u nginx -n 30 --no-pager
curl -i --resolve www.nginx.test:80:192.168.57.10 http://www.nginx.test/missing
sudo tail -n 20 /var/log/nginx/www-access.log /var/log/nginx/www-error.log

فرمان‌ها مرحله‌ای‌اند؛ بعد از test ناموفق reload نکن. باید 404 در access log ببینی. هر 404 الزاماً error log مفصل ندارد. reload پیکربندی تازه را می‌خواند و کارگرهای قدیمی کار جاری را به پایان می‌رسانند؛ تغییر نامعتبر نباید با موفقیت test اشتباه گرفته شود.

کد پاسخ سرنخ است#

403 مجوز یا policy، 404 نگاشت ناموجود، 502 پاسخ نامناسب upstream و 504 انتظار بیش از timeout را مطرح می‌کنند. علت قطعی را از لاگ و درخواست مستقیم backend پیدا کن. خاموش کردن بررسی TLS برای خطای گواهی، عیب‌یابی صحیح نیست.

تمرین و بازگشت: backend را در شب‌های proxy خاموش کن و تفاوت وضعیت عمومی و upstream را در همین قالب ببین. error_log را فقط موقتاً پرجزئیات کن و به warn برگردان؛ وجود فایل config صحیح روی دیسک اثبات فعال بودن آن نیست.

منبع: کنترل کارگرها و reload ، ngx_http_log_module .