Hvernig á að stilla sérsniðið aðgang og villuskrársnið í Nginx


Nginx HTTP netþjónn er með stórkostlega skógarhöggsaðstöðu sem er mjög sérhannaðar. Í þessari grein munum við útskýra hvernig á að stilla eigin snið fyrir aðgang og villuskrár fyrir Nginx í Linux.

Markmið þessarar handbókar er að hjálpa þér að skilja hvernig annálar eru búnar til, til að stilla sérsniðin annálasnið fyrir villuleit, bilanaleit eða greiningu á því sem gerist á vefþjóninum þínum sem og vefforritum (svo sem rakningarbeiðnir).

Þessi grein er gerð úr þremur hlutum sem munu upplýsa þig um að stilla aðgangs-/villuskrár og hvernig á að virkja skilyrta skráningu í Nginx.

Að stilla aðgangsskrár í Nginx

Undir Nginx eru allar beiðnir viðskiptavinar til netþjónsins skráðar í aðgangsskrána á tilteknu sniði með því að nota ngx_http_log_module eininguna.

Sjálfgefin annálaskráin er log/access.log (venjulega /var/log/nginx/access_log á Linux kerfum) og sjálfgefið snið fyrir skráningu er venjulega sameinað eða aðalsniðið (þetta getur verið mismunandi frá einni dreifingu til annars).

Access_log tilskipunin (á við í http, miðlara, staðsetningu, ef í staðsetningu og takmörkum nema samhengi) er notuð til að stilla annálaskrána og log_format tilskipunin (á aðeins við undir http samhenginu) er notuð til að stilla annálasniðið. Logsniðinu er lýst með algengum breytum og breytum sem myndast aðeins á þeim tíma sem log er skrifaður.

Setningafræðin til að stilla annálasnið er:

log_format format_name 'set_of_variables_to_define_format';

og setningafræði til að stilla aðgangsskrá er:

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

Eftirfarandi er útdráttur úr sjálfgefna Nginx stillingarskránni /etc/nginx/nginx.conf á 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;
}

Þetta annálarsnið gefur eftirfarandi logfærslu.

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"

Eftirfarandi er annað gagnlegt skráningarsnið sem við notum til að rekja beiðnir til vefforrita okkar með því að nota nokkrar af sjálfgefnum breytum, það er mikilvægast að það hefur beiðniauðkenni og skráir upplýsingar um staðsetningu viðskiptavinar (land, landsnúmer, svæði og borg).

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

Þú getur notað það svona:

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

Þetta mun framleiða logafærslu sem birtist svona.

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 

Þú getur tilgreint nokkra annála með því að nota access_log tilskipanirnar á sama stigi, hér erum við að nota fleiri en eina logskrá í http samhenginu.

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

Eftirfarandi eru dæmi um háþróaðari skráningarstillingar, sem eru gagnlegar fyrir annálasnið sem innihalda þjöppunartengdar breytur og til að búa til þjappaðar annálsskrár:

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

Stilla villuskrár í Nginx

Ef Nginx verður fyrir einhverjum bilunum skráir það upplýsingar um þá í villuskránni. Þessi mál falla undir mismunandi alvarleikastig: villuleit, upplýsingar, tilkynning, viðvörun, villa (þetta er sjálfgefið stig og virkar á heimsvísu), crit, viðvörun eða koma fram.

Sjálfgefin log skrá er log/error.log, en hún er venjulega staðsett í /var/log/nginx/ á Linux dreifingum. error_log tilskipunin er notuð til að tilgreina annálaskrána og hana er hægt að nota í aðal, http, pósti, straumi, miðlara, staðsetningarsamhengi (í þeirri röð).

Þú ættir líka að hafa í huga að:

  • Stillingar í aðalsamhenginu erfast alltaf af lægri stigum í röðinni hér að ofan.
  • og stillingar á neðri þrepunum hnekkja þeim stillingum sem erfðar eru frá hærri stigum.

Þú getur stillt villuskráningu með því að nota eftirfarandi setningafræði:

error_log /path/to/log_file log_level;

Til dæmis:

error_log /var/log/nginx/error_log warn; 

Þetta mun leiðbeina Nginx um að skrá öll skilaboð af gerðinni viðvörun og alvarlegri skráningarskilaboð, viðvörun og birtingarskilaboð.

Í næsta dæmi verða skilaboð um crit-, viðvörunar- og komustig skráð.

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

Íhugaðu stillingarnar hér að neðan, hér höfum við skilgreint villuskráningu á mismunandi stigum (í http og netþjóni samhengi). Ef um villu er að ræða eru skilaboðin aðeins skrifuð í eina villuskrá, þann sem er næst því stigi þar sem villan hefur komið fram.

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

Ef þú notar fleiri en eina error_log tilskipun eins og í stillingunum hér að neðan (sama stig), eru skilaboðin skrifuð í alla tilgreinda annála.

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

Stilla skilyrta skráningu í Nginx

Í sumum tilfellum gætum við viljað að Nginx framkvæmi skilyrta skráningu á skilaboðum. Ekki þarf að skrá öll skilaboð af Nginx, þess vegna getum við hunsað óverulegar eða minna mikilvægar færslur úr aðgangsskrám okkar í sérstökum tilvikum.

Við getum notað ngx_http_map_module eininguna sem býr til breytur þar sem gildin eru háð gildum annarra breyta. Færibreyturnar inni í kortablokk (sem ætti aðeins að vera til í http innihaldinu) tilgreina vörpun á milli upprunagilda og gilda sem myndast.

Fyrir þessa tegund af stillingu verður beiðni ekki skráð ef ástandið er \0 eða tómur strengur. Þetta dæmi útilokar beiðnir með HTTP stöðukóða 2xx og 3xx.

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

Hér er annað gagnlegt dæmi til að kemba vefforrit í þróunarfasa. Þetta mun hunsa öll skilaboð og aðeins skrá kembiupplýsingar.

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

Þú getur fundið frekari upplýsingar, þar á meðal að skrá þig inn á syslog hér.

Það er allt í bili! Í þessari handbók útskýrðum við hvernig á að stilla sérsniðið skráningarsnið fyrir aðgangs- og villuskrár í Nginx. Notaðu athugasemdareyðublaðið hér að neðan til að spyrja spurninga eða deila hugsunum þínum um þessa grein.