Kuidas konfigureerida Nginxis kohandatud juurdepääsu ja tõrke logivorminguid


Nginxi HTTP-serveril on fenomenaalne logimisvõimalus, mis on väga kohandatav. Selles artiklis selgitame, kuidas konfigureerida Linuxi Nginxi juurdepääsuvorminguid ja tõrke logisid.

Selle juhendi eesmärk on aidata teil aru saada, kuidas logisid genereeritakse, et konfigureerida kohandatud logivorminguid silumise, tõrkeotsingu või veebiserveris toimuva (nt päringute jälitamise) analüüsimiseks.

See artikkel on valmistatud kolmest jaotisest, mis tutvustavad juurdepääsu/tõrglogi seadistamist ja tingimisi logimist Nginxis.

Juurdepääsulogide seadistamine Nginxis

Nginxi all kirjendatakse kõik klienditaotlused serverile juurdepääsulogis määratud vormingus, kasutades moodulit ngx_http_log_module.

Vaikimisi logifail on log/access.log (Linuxi süsteemides tavaliselt/var/log/nginx/access_log) ja logimise vaikevorming on tavaliselt kombineeritud või põhivorming (see võib erinevates levitustes varieeruda).

Direktiivi access_log (rakendatav aadressil http, server, asukoht, kui see on asukohas ja piirangus, välja arvatud kontekst) kasutatakse logifaili määramiseks ja logi vormingu direktiivi (rakendatav ainult konteksti http korral) logivormingu määramiseks. Logivormingut kirjeldavad tavalised muutujad ja muutujad, mis loodi ainult logi kirjutamise ajal.

Logivormingu konfigureerimise süntaks on järgmine:

log_format format_name 'set_of_variables_to_define_format';

ja juurdepääsulogi konfigureerimise süntaks on järgmine:

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

Järgnev on väljavõte CentOS 7 vaikimisi Nginxi konfiguratsioonifailist /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;
}

See logivorming annab järgmise logikirje.

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"

Järgnev on veel üks kasulik logimisvorming, mida kasutame oma veebirakenduste päringute jälgimiseks, kasutades mõnda vaikemuutujat. Kõige tähtsam on sellel päringu ID ja logitakse kliendi asukoha üksikasjad (riik, riigikood, piirkond ja linn).

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

Saate seda kasutada järgmiselt:

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

See loob logikirje, mis ilmub sellisena.

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 

Saate määrata mitu logi, kasutades samal tasemel direktiive access_log, siin kasutame http-kontekstis rohkem kui ühte logifaili.

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

Järgnevad on täpsemad logimiskonfiguratsioonide näited, mis on kasulikud pakkimisega seotud muutujaid sisaldavate logivormingute jaoks ja tihendatud logifailide loomiseks:

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

Vigalogide seadistamine Nginxis

Juhul, kui Nginxil esineb mingeid tõrkeid, salvestab ta nende kohta käiva teabe tõrglogi. Need probleemid kuuluvad erineva raskusastme alla: silumine, teave, teade, hoiatus, viga (see on vaiketase ja töötab globaalselt), kriitiline, hoiatav või esilekerkiv.

Vaikimisi logifail on log/error.log, kuid see asub tavaliselt jaotises/var/log/nginx/Linuxi distributsioonides. Direktsiooni error_log kasutatakse logifaili täpsustamiseks ja seda saab kasutada peamises, http-s, postis, voos, serveris, asukohakontekstis (selles järjekorras).

Samuti peaksite arvestama, et:

  • Põhikontekstis olevad konfiguratsioonid pärivad alati ülaltoodud järjekorras madalamad tasemed.
  • ja madalamatel tasanditel olevad konfiguratsioonid alistavad kõrgematelt tasanditelt päritud konfiguratsioonid.

Vigade logimise saate konfigureerida järgmise süntaksiga:

error_log /path/to/log_file log_level;

Näiteks:

error_log /var/log/nginx/error_log warn; 

See käsib Nginxil logida kõik hoiatustüübid ja raskemad logitaseme kriitilised, hoiatused ja hädaabisõnumid.

Järgmises näites logitakse kriit-, häire- ja esmataseme teaded.

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

Mõelge allpool toodud konfiguratsioonile. Siin oleme defineerinud veateabe logimise erinevatel tasanditel (kontekstis http ja server). Vea korral kirjutatakse teade ainult ühele vealehele, mis on vea ilmumise tasemele kõige lähemal.

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

Kui kasutate rohkem kui ühte error_log-käsku, nagu allpool toodud konfiguratsioonis (samal tasemel), kirjutatakse sõnumid kõigile määratud logidele.

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

Tingimusliku logimise seadistamine Nginxis

Mõnel juhul võime soovida, et Nginx teostaks sõnumite tingimuslikku logimist. Kõiki sõnumeid ei pea Nginx logima, seetõttu võime teatud eksemplaride puhul ignoreerida oma juurdepääsulogide ebaolulisi või vähem olulisi logikirjeid.

Saame kasutada moodulit ngx_http_map_module, mis loob muutujad, mille väärtused sõltuvad teiste muutujate väärtustest. Kaardiploki parameetrid (mis peaksid eksisteerima ainult http-sisus) määratlevad lähte- ja saadud väärtuste kaardistamise.

Sellise sättega ei logita päringut, kui tingimuse väärtuseks on \"0" või tühi string. See näide välistab HTTP-olekukoodidega 2xx ja 3xx päringud.

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

Siin on veel üks kasulik näide veebirakenduse silumiseks arendusetapis. See ignoreerib kõiki kirju ja logib ainult silumisteavet.

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

Lisateavet, sealhulgas syslogisse logimist, leiate siit.

Praeguseks kõik! Selles juhendis selgitasime, kuidas konfigureerida kohandatud logimisvorming juurdepääsu ja tõrke logide jaoks Nginxis. Selle artikli kohta küsimuste esitamiseks või mõtete jagamiseks kasutage allolevat tagasiside vormi.