Nginx، یک سرور HTTP منبع باز و کارا و پروکسی معکوس است که مسئولیت مدیریت بار برخی از بزرگ‌ترین سایت‌ها را برروی اینترنت دارد. هنگام مدیریت سرورهای وب NGINX، یکی از رایج‌ترین کارهایی که انجام می‌دهید، بررسی فایل‌های گزارش است.

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

 

Nginx، رکوردهای رویدادهای خود را در دو نوع گزارش می‌نویسد: گزارش‌های دسترسی و گزارش‌های خطا. گزارش‌های دسترسی، اطلاعات مربوط به درخواست‌های کلاینت را می‌نویسند و گزارش‌های خطا، اطلاعات مربوط به مشکلات سرور و برنامه را می‌نویسند.

در این مقاله، چگونگی پیکربندی و خواندن گزارش‌های دسترسی و خطای Nginx شرح داده شده است.

 

این مطلب نیز ممکن است برای شما مفید باشد: نصب وب سرور Nginx بر روی دایرکت ادمین

 

پیکربندی فایل گزارش دسترسی

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

گزینه log_format به شما امکان می‌دهد، فرمت پیام‌های گزارش شده را تعریف کنید. دستورالعمل access_log، مکان فایل گزارش و فرمت استفاده شده را فعال کرده و تنظیم می‌نماید.

ابتدایی‌ترین ساختار دستورالعمل Access_log به شرح زیر است:

access_log log_file log_format;

جایی‌که log_file مسیر کامل فایل گزارش است و log_format فرمت استفاده شده توسط فایل گزارش می‌باشد.

گزارش دسترسی می‌تواند در http ,server یا بلوک دستورالعمل‌های location فعال شود.

به‌طور پیش فرض، گزارش دسترسی، بصورت سراسری در دستورالعمل http و در فایل اصلی تنظیمات Nginx فعال می‌شود.

                                  /etc/nginx/nginx.conf
http {
  ...
  access_log  /var/log/nginx/access.log;
  ...
}

به‌منظور خوانایی بهتر توصیه می‌شود، برای هر بلوک سرور، یک فایل گزارش جداگانه تنظیم کنید. دستورالعمل Access_log در دستورالعمل server تنظیم می‌شود که بر مجموعه‌ی موجود در دستورالعمل http (سطح بالاتر) برتری دارد.

                                   /etc/nginx/conf.d/domain.com.conf

http {
  ...
  access_log  /var/log/nginx/access.log;
  ...

  server {
    server_name domain.com
    access_log  /var/log/nginx/domain.access.log;
    ...
  }
}

اگر هیچ فرمت فایل گزارشی مشخص نشده باشد، Nginx از قالب ترکیبی از پیش تعریف شده‌ای استفاده می‌کند که مشابه قالب زیر  می‌باشد:

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

برای تغییر فرمت گزارش، تنظیمات پیش فرض را حذف کنید؛ یا فرمت جدیدی را تعریف نمایید. به‌عنوان‌مثال، برای تعریف یک قالب جدید گزارش به نام custom که فرمت ترکیبی را با مقدار نشانگر سرآیند X-Forwarded-For گسترش می‌دهد، باید تعریف زیر را در دستورالعمل http یا server اضافه کنید:

log_format  custom  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

برای استفاده از فرمت جدید، نام آن را بعد از فایل گزارش بصورت زیر مشخص کنید:

access_log  /var/log/nginx/access.log custom;

اگرچه فایل گزارش دسترسی، اطلاعات بسیار مفیدی را ارائه می‌دهد؛ ولیکن فضای دیسک را می‌گیرد و ممکن است بر عملکرد سرور تأثیر بگذارد. اگر سرور شما از نظر منابع ضعیف است و یک وب‌سایت شلوغ دارید، ممکن است بخواهید گزارش دسترسی را غیرفعال کنید. برای انجام این کار، مقدار دستورالعمل Access_log را بصورت زیر برروی off تنظیم نمایید:

access_log  off;

 

این مطلب نیز ممکن است برای شما مفید باشد: نصب و پیکربندی PhpMyAdmin با وب سرور Nginx درسیستم عامل CentOS 7.x

 

پیکربندی فایل گزارش خطا

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

دستورالعمل error_log، مکان و سطح سختی گزارش خطا را فعال کرده و تنظیم می‌نماید. این دستورالعمل، فرمت زیر را گرفته و می‌تواند در یک http ,server یا بلاک location تنظیم شود:

error_log log_file log_level

پارامتر log_level، سطح گزارش را تعیین می‌کند. در ادامه، سطوح سختی آن‌ها فهرست شده است (از پایین به بالا):

  • debug - پیام‌های اشکال زدایی.
  • info – پیام‌های اطلاع رسانی.
  • notice - اطلاعیه‌ها.
  • warn - هشدارها.
  • error – خطاها هنگام پردازش یک درخواست.
  • crit – موارد حیاتی که به یک اقدام سریع نیاز دارند.
  • alert – هشدارها که در آن اقدام باید فوراً انجام شود.
  • emerg - وضعیت اضطراری که در آن، سیستم در وضعیت غیر قابل استفاده است.

هر سطح گزارش، سطوح بالاتر را نیز شامل می‌شود. به‌عنوان‌مثال، اگر سطح گزارش بصورت warn تنظیم کنید، Nginx پیام‌های error ،crit ،alert و emerg را نیز گزارش می‌کند.

هنگامی‌که پارامتر log_level مشخص نشده است، به صورت پیش فرض برروی error قرار دارد.

به طور پیش فرض، دستورالعمل error_log در دستورالعمل http و در فایل اصلی nginx.conf تعریف شده است:

                                /etc/nginx/nginx.conf

http {
  ...
  error_log  /var/log/nginx/error.log;
  ...
}

مشابه گزارش‌های دسترسی توصیه می‌شود، برای هر بلاک سرور، یک فایل گزارش خطای جداگانه تنظیم کنید که بر تنظیمات ارث رسیده از سطوح بالاتر برتری دارد.

به عنوان مثال، برای تنظیم فایل گزارش خطای domain.com به سطح warn، باید از دستور زیر استفاده کنید:

http {
  ...
  error_log  /var/log/nginx/error.log;
  ...

  server {
    server_name domain.com
    error_log  /var/log/nginx/domain.error.log warn;
    ...
  }
}

هر زمان که فایل پیکربندی را تغییر می‌دهید، باید سرویس Nginx را به‌منظور اعمال تغییرات مجدداً راه‌اندازی نمایید.

 

محل فایل‌های Log

به‌طور پیش فرض در اکثر توزیع‌های لینوکس مانند اوبونتو، CentOS و دبیان، گزارش‌های دسترسی و خطا در دایرکتوری var/log/nginx/ قرار دارند.

 

خواندن و درک فایل‌های گزارش Nginx

شما می‌توانید با استفاده از دستورات استاندارد، مانند cat ،less ،grep ،cut ،awk و غیره، فایل‌های گزارش را باز کرده و تجزیه نمایید.

در اینجا، یک رکورد نمونه از فایل گزارش آمده است که از قالب گزارش Nginx پیش فرض و ترکیبی استفاده می‌کند:

Output:
192.168.33.1 - - [15/Oct/2019:19:41:46 +0000] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"

هر قسمت از رکورد به‌شرح زیر می‌باشد:

remote_addr$ یا در اینجا 192.168.33.1: آدرس IP کلاینتی که درخواست را انجام می‌دهد.

remote_user$ یا در اینجا -: کاربر معتبر HTTP. وقتی نام کاربری تنظیم نشده است، این قسمت - را نشان می‌دهد.

[time_local$] یا در اینجا [15/Oct/2019:19:41:46 +0000]: زمان سرور محلی.

"request$" یا در اینجا "GET / HTTP/1.1": نوع، مسیر و پروتکل درخواست.

status$ یا در اینجا 200: کد پاسخ سرور.

body_bytes_sent$ یا در اینجا 396: اندازه پاسخ سرور به بایت.

"http_referer$" یا در اینجا "-": آدرس اینترنتی ارجاع.

"http_user_agent$" یا در اینجا ... Mozilla/5.0: مرورگر وب (user agent) کلاینت.

از دستور tail برای مشاهده فایل گزارش در زمان واقعی استفاده کنید:

$ tail -f  access.log 

 

 

منبع:

linuxize