Cara Mengkonfigurasi Akses Kustom dan Format Log Kesalahan di Nginx

Cara Mengkonfigurasi Akses Kustom dan Format Log Kesalahan di Nginx

Nginx http Server memiliki fasilitas penebangan yang fenomenal yang sangat dapat disesuaikan. Di artikel ini, kami akan menjelaskan cara mengkonfigurasi format Anda sendiri untuk akses dan log kesalahan untuk nginx di linux.

Tujuan dari panduan ini adalah untuk membantu Anda memahami bagaimana log dihasilkan, sehingga dapat mengonfigurasi format log khusus untuk tujuan debugging, pemecahan masalah atau analisis apa yang dibuka dalam server web Anda serta aplikasi web (seperti penelusuran permintaan).

Baca juga: 4 Pemantauan Log Open Source yang Baik dan Alat Manajemen untuk Linux

Artikel ini terbuat dari tiga bagian yang akan mencerahkan Anda tentang mengonfigurasi Log Akses/Kesalahan dan cara mengaktifkan penebangan bersyarat di Nginx.

Mengkonfigurasi Log Akses di Nginx

Di bawah Nginx, Semua permintaan klien ke server direkor di Akses Log dalam format tertentu menggunakan ngx_http_log_module modul.

File log default adalah log/akses.catatan (biasanya /var/log/nginx/access_log pada sistem Linux) dan format default untuk pencatatan biasanya merupakan format gabungan atau utama (ini dapat bervariasi dari satu distro ke distro lainnya).

Itu Access_log Petunjuk (berlaku di http, server, lokasi, jika di lokasi dan batas kecuali konteks) digunakan untuk mengatur file log dan log_format Petunjuk (hanya berlaku di bawah konteks HTTP) digunakan untuk mengatur format log. Format log dijelaskan oleh variabel umum, dan variabel yang dihasilkan hanya pada saat log ditulis.

Sintaks untuk mengkonfigurasi format log adalah:

log_format format_name 'set_of_variables_to_define_format'; 

dan sintaks untuk mengkonfigurasi log akses adalah:

access_log/path/to/log_file format_name; #simplest form atau access_log/path/to/log_file [format [buffer = size] [gzip [= level]] [flush = time] [if = condition]]; 

Berikut ini adalah kutipan dari file konfigurasi NGINX default /etc/nginx/nginx.conf pada Centos 7.

/etc/nginx/nginx.conf
http #main log format log_format main '$ remote_addr - $ remote_user [$ time_local] "$ request" "$ status $ body_bytes_sent" $ http_referer "" "$ http_user_agent" "$ http_x_forwarded" $ http_user_agent "$ http_x_forwarded" $ "; access_log/var/log/nginx/access.catatan;  

Format log ini menghasilkan entri log berikut.

127.0.0.1 - DBManager [20/November/2017: 18: 52: 17 +0000] "get/http/1.1 "401 188"-"" Mozilla/5.0 (x11; ubuntu; linux x86_64; rv: 47.0) Gecko/20100101 Firefox/47.0 " 

Berikut ini adalah format logging lain yang bermanfaat yang kami gunakan untuk menelusuri permintaan ke aplikasi web kami menggunakan beberapa variabel default, yang paling penting memiliki ID permintaan dan mencatat rincian lokasi klien (negara, kode negara, wilayah, dan kota).

/etc/nginx/nginx.conf
log_format custom '$ remote_addr - $ remote_user [$ time_local] "" $ request "$ status $ body_bytes_sent" "$ http_referer" "$ http_user_agent" "geoip_cy; geoon _cye_cye_cy; 

Anda dapat menggunakannya seperti ini:

access_log/var/log/nginx/access.Log Custom; 

Ini akan menghasilkan entri log yang muncul seperti ini.

153.78.107.192 - - [21/November/2017: 08: 45: 45 +0000] "POST/NGX_PAGESPEED_BEACON?url = https%3a%2f%2fwww.contoh.com%2FADS%2FFRESH-ORANGES-1509260795 HTTP/2.0 "204 0" https: // www.SUASELL.com/ADS/Fresh-oranges-1509260795 "" Mozilla/5.0 (x11; ubuntu; linux x86_64; rv: 47.0) Gecko/20100101 Firefox/47.0 ""-"A02B2DEA9CF06344A25611C1D7AD72DB UGANDA UG KAMPALA KAMPALA 

Anda dapat menentukan beberapa log menggunakan Access_log Arahan pada level yang sama, di sini kami menggunakan lebih dari satu file log dalam konteks HTTP.

/etc/nginx/nginx.conf
http ## format log default log_format main '$ remote_addr - $ remote_user [$ time_local] "$ request" "$ status $ body_bytes_sent" $ http_referer "" "$ http_user_agent" "$ http_x_forwarded" $ http_user_agent "" $ http_x_forwarded "$" "" "$ http_x_forwarded" ## Permintaan Penelusuran Menggunakan Format Kustom Log_Format Kustom '$ Remote_Addr - $ remote_user [$ time_local] "" $ request "$ status $ body_bytes_sent" "$ http_referer" "$ http_user_agent" "" $ http_x_forwarded "$ http_user_cy" "$ http_x_forwarded" $ peta "$ peta" $ geip_cy "" $ http_x_forwarded "$ _CoIpy" $ htoCy "$ httpy" $ http_cy "$ http_cy" $ http_cory "$ http_cory" $ $ geoip_region_name $ geoip_city '; ## Ini menggunakan format log format default access_log/var/log/nginx/access.catatan; ## Ini menggunakan format log format kustom kami ACCESS_LOG/VAR/LOG/NGINX/Custom_Log Custom;  

Berikut ini adalah contoh konfigurasi logging yang lebih canggih, yang berguna untuk format log yang berisi variabel terkait kompresi dan untuk membuat file log terkompresi:

access_log/var/log/nginx/custom_log custom buffer 32k; access_log/path/to/log.Kompresi GZ GZIP flush = 5m; 

Mengkonfigurasi log kesalahan di nginx

Dalam hal Nginx mengalami gangguan apa pun, ia mencatat informasi tentang mereka di log kesalahan. Masalah -masalah ini termasuk dalam tingkat keparahan yang berbeda: debug, info, melihat, memperingatkan, kesalahan (Ini adalah level default dan bekerja secara global), crit, peringatan, atau muncul.

File log default adalah log/kesalahan.catatan, Tapi biasanya terletak di /var/log/nginx/ pada distribusi Linux. Itu catatan eror Petunjuk digunakan untuk menentukan file log, dan dapat digunakan di utama, http, mail, stream, server, konteks lokasi (dalam urutan itu).

Anda juga harus mencatat bahwa:

  • Konfigurasi dalam konteks utama selalu diwarisi dengan level yang lebih rendah dalam urutan di atas.
  • dan konfigurasi di level yang lebih rendah mengganti konfigurasi yang diwarisi dari level yang lebih tinggi.

Anda dapat mengonfigurasi logging kesalahan menggunakan sintaks berikut:

ERROR_LOG/PATH/TO/LOG_FILE LOG_LEVEL; 

Misalnya:

ERROR_LOG/VAR/LOG/NGINX/ERROR_LOG WARN; 

Ini akan menginstruksikan nginx untuk mencatat semua pesan jenis memperingatkan dan level log yang lebih parah crit, peringatan, Dan muncul pesan.

Dalam contoh berikutnya, pesan dari crit, peringatan, Dan muncul Level akan dicatat.

error_log/var/www/example1.com/log/error_log crit; 

Pertimbangkan konfigurasi di bawah ini, di sini, kami telah mendefinisikan kesalahan logging pada level yang berbeda (dalam konteks HTTP dan server). Dalam hal kesalahan, pesan ditulis hanya untuk satu log kesalahan, yang paling dekat dengan level di mana kesalahan telah muncul.

/etc/nginx/nginx.conf
http log_format compression '$ remote_addr - $ remote_user [$ time_local] "" $ request "$ status $ body_bytes_sent" "$ http_referer" "$ http_user_agent" "$ gzip_ratio"'; ERROR_LOG/VAR/LOG/NGINX/ERROR_LOG CRIT; server dengarkan 80; server_name example1.com; #Ini ini mencatat pesan kesalahan untuk contoh1.com Only error_log/var/log/nginx/example1.error_log warn;… server listen 80; server_name example2.com; #Ini Logs Kesalahan Pesan untuk Contoh2.com Only error_log/var/log/nginx/example1.catatan eror;… .  

Jika Anda menggunakan lebih dari satu catatan eror arahan seperti dalam konfigurasi di bawah ini (level yang sama), pesan ditulis untuk semua log yang ditentukan.

/etc/nginx/nginx.conf
server dengarkan 80; server_name example1.com; error_log/var/www/example1.com/log/error_log warn; error_log/var/log/nginx/example1.error_log crit;… 

Mengkonfigurasi logging bersyarat di nginx

Dalam beberapa kasus, kami mungkin ingin Nginx melakukan penebangan pesan bersyarat. Tidak setiap pesan harus dicatat oleh Nginx, oleh karena itu kita dapat mengabaikan entri log yang tidak signifikan atau kurang penting dari log akses kami untuk contoh tertentu.

Kita bisa menggunakan ngx_http_map_module modul yang menciptakan variabel yang nilainya bergantung pada nilai variabel lain. Parameter di dalam blok peta (yang seharusnya ada di konten http saja) Tentukan pemetaan antara sumber dan nilai yang dihasilkan.

Untuk pengaturan semacam ini, permintaan tidak akan dicatat jika kondisi tersebut mengevaluasi "0" atau string kosong. Contoh ini tidak termasuk permintaan dengan kode status HTTP 2xx Dan 3xx.

/etc/nginx/nginx.conf
http peta $ status $ condition ~^[23] 0; default 1;  server access_log/path/to/access.log kustom if = $ condition;  

Berikut adalah contoh berguna lainnya untuk men -debug aplikasi web dalam fase pengembangan. Ini akan mengabaikan semua pesan dan hanya informasi log debug.

/etc/nginx/nginx.conf
 http peta $ info $ debuggable default 0; debug 1;  server ... access_log/var/log/nginx/testapp_debug_access_log debug if = $ debuggable; #logs Permintaan Lain Access_log/var/log/nginx/testapp_access.Log Main;… .  

Anda dapat mengetahui informasi lebih lanjut, termasuk logging ke syslog di sini.

Itu saja untuk saat ini! Dalam panduan ini, kami menjelaskan cara mengkonfigurasi format logging khusus untuk akses dan log kesalahan di nginx. Gunakan formulir umpan balik di bawah ini untuk mengajukan pertanyaan atau membagikan pemikiran Anda tentang artikel ini.