Nginx-de özbaşdak giriş we säwlik ýazgy formatlaryny nädip sazlamaly


Nginx HTTP serwerinde ýokary derejede düzülip bilinýän ajaýyp hasaba alyş desgasy bar. Bu makalada, Linux-daky Nginx üçin giriş we ýalňyş ýazgylary üçin öz formatlaryňyzy nädip düzmelidigini düşündireris.

Bu gollanmanyň maksady, gündeligiň nädip döredilýändigine düşünmäge kömek etmek, web serweriňizde bolup geçýän zatlary çözmek, näsazlyklary düzetmek ýa-da derňemek maksady bilen ýörite gündelik formatlaryny düzmek, şeýle hem web programmalary (gözlemek haýyşlary ýaly).

Bu makala, giriş/säwlik ýazgylaryny düzmek we Nginx-de şertli hasaba girmegi nädip açyp boljakdygy barada size maglumat berjek üç bölümden ybarat.

Nginx-de giriş surnallaryny sazlamak

Nginx-iň aşagynda, serwere ýüz tutýan ähli islegler, giriş gündeliginde ngx_http_log_module modulyny ulanyp, belli bir formatda ýazylýar.

Adaty hasaba alyş faýly log/access.log (adatça Linux ulgamlarynda/var/log/nginx/access_log) we hasaba alyş üçin adaty format adatça birleşdirilen ýa-da esasy formatdyr (bu bir distrodan beýlekisine üýtgäp biler).

Access_log direktiwasy (http, serwerde, ýerleşýän ýerinde, kontekstden başga ýerde we çäkde ulanylýar) gündelik faýlyny bellemek üçin ulanylýar we log formatyny bellemek üçin log_format direktiwasy (diňe http kontekstinde ulanylýar) ulanylýar. Gündelik formaty umumy üýtgeýjiler we diňe gündeligiň ýazylan wagty döredilen üýtgeýjiler bilen düşündirilýär.

Gündelik formatyny düzmek üçin sintaksis:

log_format format_name 'set_of_variables_to_define_format';

giriş gündeligini sazlamak üçin sintaksis:

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

Aşakda CentOS 7-de deslapky Nginx konfigurasiýa faýlyndan bölek /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_for"';

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

Bu gündelik formaty, aşakdaky gündelik ýazgyny berýär.

127.0.0.1 - dbmanager [20/Nov/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"

Aşakda käbir üýtgeýän üýtgeýjileri ulanyp, web programmalarymyza haýyşlary yzarlamak üçin ulanýan başga bir peýdaly hasaba alyş formaty, iň esasysy haýyşnama belgisi we müşderiniň ýerleşýän ýeriniň jikme-jiklikleri (ýurt, ýurt kody, sebit we şäher) hasaba alynýar.

log_format  custom '$remote_addr - $remote_user [$time_local] '
                         	     '"$request" $status $body_bytes_sent '
                      		     '"$http_referer" "$http_user_agent" '
                     		     '"$http_x_forwarded_for" $request_id '
                   		     '$geoip_country_name $geoip_country_code '
                  		     '$geoip_region_name $geoip_city ';

Muny şeýle ulanyp bilersiňiz:

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

Munuň ýaly görünýän gündelik ýazgy döreder.

153.78.107.192 - - [21/Nov/2017:08:45:45 +0000] "POST /ngx_pagespeed_beacon?url=https%3A%2F%2Fwww.example.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 

Bir derejedäki access_log direktiwalaryny ulanyp birnäçe gündeligi kesgitläp bilersiňiz, bu ýerde http kontekstinde birden köp log faýly ulanýarys.

http{
	##default log format
	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                                	      '$status $body_bytes_sent "$http_referer" '
                                         '"$http_user_agent" "$http_x_forwarded_for"';
      
	##request tracing using custom format
	log_format custom '$remote_addr - $remote_user [$time_local] '
                                           '"$request" $status $body_bytes_sent '
                                           '"$http_referer" "$http_user_agent" '
                                           '"$http_x_forwarded_for" $request_id '
                                           '$geoip_country_name $geoip_country_code '
                                          '$geoip_region_name $geoip_city ';

	##this uses the default log format
	access_log /var/log/nginx/access.log;

	##this uses the our custom log format
	access_log /var/log/nginx/custom_log custom;
}

Aşakda gysyş bilen baglanyşykly üýtgeýänleri öz içine alýan gündelik formatlary we gysylan gündelik faýllaryny döretmek üçin peýdaly has ösen hasaba alyş konfigurasiýa mysallary bar:

access_log /var/log/nginx/custom_log custom buffer 32k;
access_log /path/to/log.gz compression  gzip  flush=5m;

Nginx-de säwlik surnallaryny sazlamak

Nginx haýsydyr bir ýalňyşlygy başdan geçiren ýagdaýynda, olar hakda maglumatlary säwlik gündeliginde ýazýar. Bu meseleler dürli agyrlyk derejelerine düşýär: düzediş, maglumat, duýduryş, duýduryş, ýalňyşlyk (bu başlangyç dereje we dünýä derejesinde işleýär), tankytçy, duýduryş ýa-da ýüze çykýar.

Adaty gündelik faýly log/error.log, ýöne adatça Linux paýlamalarynda/var/log/nginx/ýerleşýär. Error_log direktiwasy gündelik faýlyny kesgitlemek üçin ulanylýar we esasy, http, poçta, akym, serwer, ýerleşiş kontekstinde (şol tertipde) ulanylyp bilner.

Şeýle hem bellemeli:

  • Esasy kontekstdäki konfigurasiýalar elmydama ýokardaky tertipde aşaky derejelerden miras galar.
  • we aşaky derejelerdäki konfigurasiýalar has ýokary derejelerden miras galan konfigurasiýalary ýok edýär.

Aşakdaky sintaksis ulanyp, säwlik ýazgysyny düzüp bilersiňiz:

error_log /path/to/log_file log_level;

Mysal üçin:

error_log /var/log/nginx/error_log warn; 

Bu, Nginx-a duýduryş görnüşindäki ähli habarlary we has agyr log derejeli tankytçylary, duýduryşlary we ýüze çykýan habarlary ýazmagy tabşyrar.

Indiki mysalda tankytçylaryň, duýduryşlaryň we ýüze çykýan derejeleriň habarlary ýazylar.

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

Aşakdaky konfigurasiýany gözden geçiriň, bu ýerde dürli derejelerde (http we serwer kontekstinde) säwligi hasaba aldyk. Analňyşlyk ýüze çykan halatynda habar diňe bir ýalňyşlyk gündeligine ýazylýar, ýalňyşyň ýüze çykan derejesine iň ýakyn.

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 {
		listen 80;
		server_name example1.com;

		#this logs errors messages for example1.com only
      		error_log  /var/log/nginx/example1.error_log  warn;
            	…...
	}

     	server {
		listen 80;
		server_name  example2.com;

		#this logs errors messages for example2.com only
        		error_log  /var/log/nginx/example1.error_log;
        		…….
    	}
}

Aşakdaky konfigurasiýada bolşy ýaly birden köp error_log direktiwasyny ulansaňyz, habarlar ähli görkezilen surnallara ýazylýar.

server {
		listen 80;
		server_name example1.com;

      		error_log  /var/www/example1.com/log/error_log  warn;
		error_log  /var/log/nginx/example1.error_log  crit;
            	…...
	}

Nginx-de şertli girişi sazlamak

Käbir ýagdaýlarda, Nginx-den habarlaryň şertli hasaba alynmagyny isläp bileris. Her bir habar Nginx tarapyndan ýazylmaly däl, şonuň üçin aýratyn ýagdaýlar üçin giriş gündeligimizden ujypsyz ýa-da az ähmiýetli ýazgylary hasaba alyp bilmeris.

Gymmatlyklary beýleki üýtgeýänleriň bahalaryna bagly üýtgeýänleri döredýän ngx_http_map_module modulyny ulanyp bileris. Karta blokynyň içindäki parametrler (diňe http mazmunynda bolmaly) çeşme bilen netijäniň bahalarynyň arasynda kartalaşdyryşy kesgitleýär.

Şeýle sazlama üçin, şert \0 ýa-da boş setir bilen bahalandyrylsa, haýyş ýazylmaz. Bu mysal, HTTP status kodlary 2xx we 3xx bolan talaplary öz içine almaýar.

http{
	map $status $condition {
		~^[23] 0;
    		default 1;
	}
	server{
		access_log  /path/to/access.log  custom if=$condition;
	}
}

Ine, ösüş tapgyrynda web programmasyny düzetmek üçin başga bir peýdaly mysal. Bu ähli habarlary äsgermezlik eder we diňe düzediş maglumatlary hasaba alar.

 
http{
	map $info  $debuggable { 
    		default     0; 
    		debug       1; 
	} 
	server{
		……..
		access_log /var/log/nginx/testapp_debug_access_log  debug if=$debuggable; 
		#logs other requests 
		access_log  /var/log/nginx/testapp_access.log  main; 
		…….
	}
}

Syslog-a girmegi goşmak bilen has giňişleýin maglumaty şu ýerden tapyp bilersiňiz.

Bularyň hemmesi häzirlikçe! Bu gollanmada, Nginx-de giriş we säwlik ýazgylary üçin ýörite hasaba alyş formatyny nädip düzmelidigini düşündirdik. Sorag bermek ýa-da bu makala hakda pikirleriňizi paýlaşmak üçin aşakdaky seslenme formasyny ulanyň.