Jinsi ya kusanidi Ufikiaji Maalum na Fomati za Ingia za Makosa katika Nginx


Seva ya Nginx HTTP ina kifaa cha ajabu cha kukata miti ambacho kinaweza kubinafsishwa sana. Katika makala hii, tutaelezea jinsi ya kusanidi fomati zako za ufikiaji na kumbukumbu za makosa kwa Nginx kwenye Linux.

Lengo la mwongozo huu ni kukusaidia kuelewa jinsi kumbukumbu zinavyotengenezwa, ili kusanidi fomati maalum za kumbukumbu kwa madhumuni ya utatuzi, utatuzi au uchambuzi wa kile kinachotokea ndani ya seva yako ya wavuti na vile vile programu za wavuti (kama vile maombi ya kufuatilia).

Nakala hii imeundwa na sehemu tatu ambazo zitakuangazia juu ya kusanidi kumbukumbu za ufikiaji/makosa na jinsi ya kuwezesha ukataji wa masharti katika Nginx.

Inasanidi Kumbukumbu za Ufikiaji katika Nginx

Chini ya Nginx, maombi yote ya mteja kwa seva yanarekodiwa katika logi ya ufikiaji katika umbizo maalum kwa kutumia moduli ya ngx_http_log_module.

Faili chaguo-msingi ya kumbukumbu ni log/access.log (kawaida /var/log/nginx/access_log kwenye mifumo ya Linux) na umbizo chaguomsingi la ukataji miti kwa kawaida ni umbizo la pamoja au kuu (hii inaweza kutofautiana kutoka distro moja hadi nyingine).

Maagizo ya ufikiaji_logi (inayotumika katika http, seva, eneo, ikiwa katika eneo na kikomo isipokuwa muktadha) hutumiwa kuweka faili ya kumbukumbu na mwongozo wa log_format (unaotumika chini ya muktadha wa http pekee) hutumiwa kuweka umbizo la logi. Muundo wa logi unaelezewa na vigezo vya kawaida, na vigezo vinavyozalishwa tu wakati ambapo logi imeandikwa.

Syntax ya kusanidi umbizo la logi ni:

log_format format_name 'set_of_variables_to_define_format';

na syntax ya kusanidi logi ya ufikiaji ni:

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]];

Ifuatayo ni dondoo kutoka kwa faili ya usanidi ya Nginx /etc/nginx/nginx.conf kwenye CentOS 7.

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;
}

Umbizo hili la kumbukumbu hutoa ingizo la kumbukumbu lifuatalo.

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"

Ifuatayo ni umbizo lingine muhimu la ukataji miti ambalo tunatumia kufuatilia maombi kwa programu zetu za wavuti kwa kutumia baadhi ya vigeu chaguomsingi, muhimu zaidi ina kitambulisho cha ombi na maelezo ya eneo la mteja (nchi, msimbo wa nchi, eneo na jiji).

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 ';

Unaweza kuitumia kama hii:

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

Hii itatoa kiingilio cha logi ambacho kinaonekana kama hii.

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 

Unaweza kubainisha kumbukumbu kadhaa kwa kutumia maelekezo ya access_log kwenye kiwango sawa, hapa tunatumia zaidi ya faili moja ya kumbukumbu katika muktadha wa http.

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;
}

Ifuatayo ni mifano ya hali ya juu zaidi ya usanidi wa ukataji miti, ambayo ni muhimu kwa fomati za kumbukumbu zilizo na vigeuzo vinavyohusiana na mgandamizo na kuunda faili za kumbukumbu zilizoshinikizwa:

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

Kusanidi Kumbukumbu za Hitilafu katika Nginx

Iwapo Nginx itapata shida yoyote, inarekodi habari inayowahusu kwenye logi ya makosa. Matatizo haya yako chini ya viwango tofauti vya ukali: utatuzi, maelezo, ilani, onya, hitilafu (hiki ndicho kiwango chaguo-msingi na kinafanya kazi duniani kote), crit, arifa au ibuka.

Faili chaguo-msingi ya kumbukumbu ni log/error.log, lakini kwa kawaida iko katika /var/log/nginx/ kwenye usambazaji wa Linux. Maagizo ya error_log hutumiwa kubainisha faili ya kumbukumbu, na inaweza kutumika katika kuu, http, barua pepe, mkondo, seva, muktadha wa eneo (kwa mpangilio huo).

Unapaswa pia kutambua kwamba:

  • Mipangilio katika muktadha mkuu daima hurithiwa na viwango vya chini kwa mpangilio ulio hapo juu.
  • na usanidi katika viwango vya chini hubatilisha usanidi uliorithiwa kutoka kwa viwango vya juu.

Unaweza kusanidi ukataji wa makosa kwa kutumia syntax ifuatayo:

error_log /path/to/log_file log_level;

Kwa mfano:

error_log /var/log/nginx/error_log warn; 

Hii itaelekeza Nginx kuweka jumbe zote za aina ya onyo na viwango vikali zaidi vya kiwango cha kumbukumbu, arifa na jumbe zinazotokea.

Katika mfano unaofuata, ujumbe wa viwango vya uhakiki, arifa, na wanaoibuka utawekwa.

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

Fikiria usanidi ulio hapa chini, hapa, tumefafanua uwekaji makosa katika viwango tofauti (katika http na muktadha wa seva). Katika kesi ya kosa, ujumbe umeandikwa kwa logi moja tu ya makosa, iliyo karibu na kiwango ambacho kosa limeonekana.

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;
        		…….
    	}
}

Ikiwa unatumia zaidi ya maelekezo ya error_log kama ilivyo kwenye usanidi ulio hapa chini (kiwango sawa), ujumbe huandikwa kwa kumbukumbu zote zilizoainishwa.

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;
            	…...
	}

Kusanidi Kuingia kwa Masharti katika Nginx

Katika baadhi ya matukio, tunaweza kutaka Nginx kutekeleza kumbukumbu kwa masharti ya ujumbe. Sio kila ujumbe lazima uingizwe na Nginx, kwa hivyo tunaweza kupuuza maingizo ya kumbukumbu yasiyo na umuhimu au muhimu kutoka kwa kumbukumbu zetu za ufikiaji kwa matukio fulani.

Tunaweza kutumia ngx_http_map_module moduli ambayo huunda vigeuzo ambavyo maadili yake yanategemea maadili ya vigeu vingine. Vigezo ndani ya kizuizi cha ramani (ambacho kinapaswa kuwepo katika maudhui ya http pekee) vinabainisha ramani kati ya chanzo na thamani zinazotokana.

Kwa mpangilio wa aina hii, ombi halitarekodiwa ikiwa hali itatathminiwa hadi \0 au mfuatano usio na kitu. Mfano huu haujumuishi maombi yenye misimbo ya hali ya HTTP 2xx na 3xx.

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

Hapa kuna mfano mwingine muhimu wa kurekebisha programu ya wavuti katika awamu ya ukuzaji. Hii itapuuza ujumbe wote na kuweka tu taarifa ya utatuzi.

 
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; 
		…….
	}
}

Unaweza kupata habari zaidi, pamoja na kuingia kwenye syslog hapa.

Ni hayo tu kwa sasa! Katika mwongozo huu, tulielezea jinsi ya kusanidi umbizo la ukataji miti maalum kwa ufikiaji na kumbukumbu za makosa katika Nginx. Tumia fomu ya maoni iliyo hapa chini kuuliza maswali au kushiriki mawazo yako kuhusu makala haya.