مقالات
کوبرنتیز

گزارش های دسترسی NGINX چیست؟

در این مقاله راهنمای جامعی درباره گزارش های دسترسی NGINX برای شما آماده کرده‌ایم. برای آشنایی بیشتر با آن، ادامه این مقاله را از دست ندهید.

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

آشنایی با گزارش های دسترسی NGINX

گزارش یا لاگ های دسترسی NGINX فایل‌هایی هستند که اطلاعاتی را از تمام منابعی که یک کاربر در سرور NGINX به آن‌ها دسترسی دارد ارائه می‌دهند. از جمله این اطلاعات می‌توان به اینکه چه چیزی (از جمله آدرس آی‌پی کلاینت، کد مربوط به درخواست، ایجنت کاربر و..) به سرور دسترسی دارد و چه پاسخی را در ازای درخواست‌های خود دریافت می‌کند، اشاره کرد. تمام درخواست‌های ارسالی به NGINX دقیقا بعد از پردازش درخواست اولیه، در فایل لاگ ثبت می‌شوند. در ادامه تعدادی از فیلدهای اصلی گزارش های دسترسی NGINX که باید با آن آشنا باشید را معرفی کرده‌ایم:

  • Remote_addr: آدرس آی‌پی کلاینتی که درخواستی را به شما ارسال می‌کند.
  • http_user_agent: ایجنتی که کاربر از آن برای ارسال درخواست استفاده می‌کند.
  • time_local: محدوده زمان محلی سرور
  • request: درخواست ارسالی به منابع شما توسط یک کاربر (API path یا هر فایل دیگری)
  • Body_bytes_sent: اندازه حجم پاسخ به یک درخواست در واحد بایت
  • Request_time: کل زمان سپری شده برای پردازش یک درخواست
  • Remote_user: اطلاعاتی درباره ایجاد درخواست توسط کاربر
  • http_referer: آدرس آی‌پی یک referer یا ارجاع‌دهنده http
  • gzip_ratio: نسبت فشرده‌سازی gzip، البته اگر gzip فعال باشد.

محل قرارگیری گزارش های دسترسی NGINX

شما می‌توانید گزارش‌های دسترسی خود را در مسیر logs/access.log پیدا کنید و مکان آن‌ها را نیز می‌توانید با استفاده از دستور دهنده access_log در فایل پیکربندی NGINX تغییر دهید.

access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

access_log /var/log/nginx/access.log combined

شما علاوه بر تغییر مسیر فیلد در دستور دهنده access_log، می‌توانید محل ذخیره گزارش‌های دسترسی خود را نیز تغییر دهید. از طرفی پیکربندی یک گزارش دسترسی NGINX، می‌تواند توسط پیکربندی دیگری در سطح پایین‌تری لغو شود. برای این مورد مثالی را برای شما آماده کرده‌ایم.

http {

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

  server {

    listen 8000;

    location /health {

      access_log off; # <—– this WILL work

      proxy_pass http://app1server;

    }

  )

}

در این مثال اگر دقت کنید، هیچ تماسی با مسیر health برقرار نمی‌شود؛ چراکه گزارش های دسترسی NGINX برای این مسیر بسته هستند. با این حال تمام تماس‌های دیگر در فایل‌های لاگ ذخیره می‌شوند. این مسئله را می‌توان برای بسیاری دیگر از مسیر‌ها در NGINX پیاده کرد.

نحوه فعال‌سازی گزارش های دسترسی NGINX

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

access_log /var/log/nginx/access.log combined

در این دستور پارامتر اول محل قرارگیری فایل و پارامتر دوم فرمت فایل گزارش است. اگر شما این دستور از access_log را در هر مسیری از سرور بدهید، ذخیره گزارش در آن مسیر آغاز خواهد شد.

تنظیم فرمت سفارشی گزارش دسترسی NGINX

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

log_format upstream_time ‘$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”‘;

بیشتر فیلدهای این دستور خود توضیحی هستند؛ اما برای بررسی و آشنایی بیشتر با آن‌ها، می‌توانید لینک پیکربندی گزارش‌های NGINX را بررسی کنید. همچنین می‌توانید قالب‌های گزارش را در یک زیمنه HTTP در مسیر etc/nginx/nginx.conf مشخص کنید و سپس از آن‌ها در زمینه سرور استفاده کنید. گزارش‌ های دسترسی NGINX به صورت پیش‌فرض در یک فرمت مشخص شبیه به دستور زیر ذخیره می‌شوند.

log_format combined ‘$remote_addr – $remote_user [$time_local] ‘

                    ‘”$request” $status $body_bytes_sent ‘

                    ‘”$http_referer” “$http_user_agent”‘;

هنگامی که شما فرمت گزارش دسترسی خود را مشخص کردید، می‌توانید از آن در مسیر access_log به شکل زیر استفاده کنید.

server {

    access_log /var/log/nginx/access.log combined

    access_log /var/log/nginx/access.log upstream_time #defined in the first format

    …

}

پیکربندی گزارش های شرطی دسترسی NGINX

گاهی اوقات شما نیاز دارید تا برای نوشتن و طراحی گزارش دسترسی، شروطی را تعیین کنید. به این نوع از فایل لاگ، لاگ شرطی گفته می‌شود. برای مثال:

map $remote_addr $log_enable {

    “192.168.4.1” 0;

    “192.168.4.2” 0;

    “192.168.4.3” 0;

    “192.168.4.4” 0;

    default 1;

}

access_log /var/log/nginx/access.log combined if=$log_enable

مثال بالا در واقع بدین معنا است که هر زمان گزارش‌های دسترسی از طرف آی‌پی آدرس‌های 192.168.4.1 تا 192.168.4.4 گزارش‌های دسترسی آمد، آن گزارش ثبت نشود. اما طبق این دستور، گزارش‌های از طرف سایر آی‌پی‌ها ثبت می‌شود.

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

چگونه می‌توان گزارش های دسترسی NGINX را دید

امکانات لینوکس، مانند LESS یا TAIL، به شما اجازه می‌دهد تا لاگ‌های دسترسی NGINX را به سادگی ببینید. همچنین می‌توانید محل قرارگیری این گزارش‌های دسترسی را از پیکربندی فایل‌های خود ببینید. با استفاده از سیستم‌های جدیدتر که می‌توانند systemd را اجرا می‌کنند، می‌توانید از journalctl برای تعقیب فایل‌های گزارش استفاده کنید. برای دیدن این فایل‌های لاگ، از دستور زیر استفاده کنید.

journalctl -fu nginx.service

همچنین با استفاده از دستور زیر می‌توانید محل قرارگیری لاگ خود را تعقیب کنید.

tail -f /var/log/nginx/access.log

البته برای این کار می‌توانید از journalctl نیز استفاده کنید، اما استفاده از این دستور دهنده می‌تواند نتایج کمی گیج‌کننده‌ای داشته باشد.

چگونگی از کار انداختن گزارش های دسترسی

برای اینکه بتوانید یک گزارش دسترسی را از کار بیندازید، کافی است دستور زیر را در مسیر access_log اجرا کنید:

access_log off;

این دستور برای زمانی که فایل‌های گزارش زیادی دارید و فضای زیادی از حجم شما را اشغال کرده است بسیار کاربردی است؛ چراکه استفاده از آن در این مواقع می‌تواند تاثیر بسیار زیاری روی عملکرد سرور NGINX شما نیز بگذارد. البته از کار انداختن لاگ‌های مختلف همیشه به شما پیشنهاد نمی‌شود، چرا که ممکن است مشکلات زیادی را برای شما به وجود آورد.

کلام آخر

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

ارسال دیدگاه