Stel Nginx op vir prestasie en sekuriteit

In hierdie handleiding gaan ons kyk hoe ons Nginx-webbediener vir ‘n produksie-omgewing kan opstel.


‘N Webbediener in ‘n produksieomgewing verskil van ‘n webbediener in ‘n toetsomgewing ten opsigte van prestasie, sekuriteit en so aan.

Daar is standaard ‘n gereedheidsinstelling vir ‘n Nginx-webbediener wat gereed is om te gebruik sodra u dit suksesvol geïnstalleer het. Die standaardkonfigurasie is egter nie goed genoeg vir ‘n produksie-omgewing nie. Daarom sal ons konsentreer op die manier om Nginx op te stel om beter te presteer tydens swaar en normale verkeerspeil, en hoe om dit te beveilig teen gebruikers wat van plan is om dit te misbruik.

As u Nginx nie op u masjien geïnstalleer het nie, kan u hier kyk hoe u dit doen. Dit wys jou hoe om Nginx op ‘n Unix-platform te installeer. Kies om Nginx via die bronlêers te installeer, want die voorafgeboude Nginx bevat nie enkele van die modules wat in hierdie tutoriaal gebruik word nie..

vereistes

Die volgende moet op u rekenaar geïnstalleer word en seker maak dat u hierdie tutoriaal op enige Debian-gebaseerde platform, soos Ubuntu, uitvoer.

  • Ubuntu of enige ander Debian-gebaseerde platform
  • wget
  • Vim (teksredakteur)

U moet ook ‘n paar opdragte uitvoer of uitvoer in hierdie tutoriaal as ‘n wortelgebruiker via die sudo-opdrag.

Die begrip Nginx-konfigurasiestruktuur

In hierdie afdeling kyk ons ​​na die volgende:

  • Struktuur van Nginx
  • Afdelings soos ‘n gebeurtenis, HTTP en e-pos
  • Geldige sintaksis van Nginx

Aan die einde van hierdie gedeelte, sal u die struktuur van Nginx-konfigurasie, die doel of rolle van afdelings verstaan, asook hoe om geldige riglyne in afdelings te definieer.

Die volledige Nginx-konfigurasielêer het ‘n logiese struktuur wat bestaan ​​uit riglyne wat in ‘n aantal afdelings gegroepeer is, soos die gebeurtenisafdeling, http-afdeling, posafdeling en so aan..

Die primêre konfigurasielêer is op /etc/nginx/nginx.conf geleë, terwyl ander konfigurasielêers by / etc / nginx geleë is.

Hoofkonteks

Hierdie afdeling of konteks bevat riglyne buite spesifieke afdelings soos die posafdeling.

Enige ander voorskrifte soos gebruikersginginx; , Werkerverwerkings 1; , Error_log /var/log/nginx/error.log waarsku; en pid /var/run/nginx.pid kan binne die hoofgedeelte of konteks geplaas word.

Maar sommige van hierdie riglyne soos die werkersverwerkings kan ook in die afdeling voorkom.

artikels

Afdelings in Nginx definieer die konfigurasie vir Nginx-modules.

Byvoorbeeld, die http-afdeling definieer die konfigurasie vir die ngx_http_core-module, die gebeurtenisgedeelte definieer die konfigurasie vir die ngx_event_module, terwyl die posgedeelte die konfigurasie vir die ngx_mail_module definieer.

U kan kyk hier vir ‘n volledige lys van afdelings in Nginx.

voorskrifte

Riglyne in Nginx bestaan ​​uit ‘n veranderlike naam en ‘n aantal argumente soos die volgende:

Die werkerverwerkings is ‘n veranderlike naam, terwyl die motor as argument dien.

werkerverwerk outomaties;

Die voorskrifte eindig met ‘n semi-kolon soos hierbo getoon.

Laastens moet die Nginx-konfigurasielêer by ‘n bepaalde stel reëls hou. Die volgende is die geldige sintaksis van die Nginx-opset:

  • Geldige riglyne begin met ‘n veranderlike naam, gevolg deur een of meer argumente
  • Alle geldige voorskrifte eindig met ‘n semi-kolon;
  • Gedeeltes word gedefinieër met krullerige draadjies {}
  • ‘N Gedeelte kan in ‘n ander afdeling ingebed word
  • Opstelling buite enige afdeling is deel van die Nginx globale konfigurasie.
  • Opmerkings oor die reëls wat met die hash-teken # begin.

Stel Nginx op vir uitvoering

In hierdie afdeling stel ons Nginx op om beter te presteer tydens swaar verkeer en verkeerssnelheid.

Ons sal kyk hoe u die volgende kan instel:

  • werkers
  • Disk I / O-aktiwiteit
  • Netwerkaktiwiteit
  • buffers
  • Kompressie
  • caching
  • tydverstreke

Tik steeds die volgende opdragte binne die geaktiveerde virtuele omgewing in die Nginx-gids en lys die inhoud daarvan.

CD nginx && ls

Soek vir die lêergids Binne hierdie lêergids is die nginx.conf-lêer.

Ons gebruik hierdie lêer om Nginx te konfigureer

Voer nou die volgende opdragte uit om na die conf map te blaai en die lêer nginx.conf met die vim-redakteur oop te maak

CD konf
sudo vim nginx.conf

Hieronder is ‘n skermkiekie van hoe die nginx.conf-lêer standaard lyk.

werkers

Om Nginx beter te laat presteer, moet ons werkers in die gebeure-afdeling opstel. Deur Nginx-werknemers op te stel, stel u in staat om verbindings van kliënte effektief te verwerk.

Aanvaar dat u nie die vim-redakteur gesluit het nie, druk op die i-knoppie op die sleutelbord om die nginx.conf-lêer te wysig.

Kopieer en plak die volgende in die gebeure-afdeling soos hieronder getoon:

gebeure {
werkerverwerk outomaties;
werkerverbindings 1024;
werker_rlimit_nofile 20960;
multi_aanvaar op;
mutex_accept aan;
mutex_accept_delay 500ms;
gebruik epoll;
epoll_events 512;
}

worker_processes: Hierdie richtlijn beheer die aantal werkers in Nginx. Die waarde van hierdie richtlijn is ingestel op outomaties om Nginx toe te laat om die aantal beskikbare kerns, skywe, bedienerbelasting en netwerk-substelsel te bepaal. U kan egter die aantal kerns ontdek deur die opdrag lscpu op die terminale uit te voer.

worker_connections: Hierdie richtlijn stel die waarde van die aantal gelyktydige verbinding wat deur ‘n werker geopen kan word. Die standaardwaarde is 512, maar ons stel dit op 1,024 sodat een werker ‘n baie gelyktydige verbinding van ‘n kliënt kan aanvaar.

worker_rlimit_nofile: Hierdie richtlijn hou op een of ander manier verband met werkersverbindings. Om groot gelyktydige verbinding te kan hanteer, stel ons dit op ‘n groot waarde.

multi_accept: Met hierdie richtlijn kan ‘n werker baie verbindings op ‘n slag aanvaar. ‘N Tou in hierdie konteks beteken eenvoudig ‘n reeks data-voorwerpe wat wag om verwerk te word.

mutex_accept: Hierdie richtlijn is standaard afgeskakel. Maar omdat ons baie werkers in Nginx gekonfigureer het, moet ons dit aanskakel, soos in die kode hierbo getoon, sodat werkers een vir een nuwe verbindings kan aanvaar.

mutex_accept_delay: Hierdie richtlijn bepaal hoe lank ‘n werker moet wag voordat hy ‘n nuwe verbinding aanvaar. Sodra die accept_mutex aangeskakel is, word ‘n mutex-slot aan ‘n werker toegeken vir ‘n tydsraamwerk wat deur die accept_mutex_delay bepaal word. As die tydsraamwerk verby is, is die volgende werker gereed om nuwe verbindings te aanvaar.

gebruik: Hierdie richtlijn spesifiseer die metode om ‘n verbinding vanaf die kliënt te verwerk. In hierdie tutoriaal het ons besluit om die waarde op epoll te stel omdat ons aan ‘n Ubuntu-platform werk. Die epoll-metode is die mees effektiewe verwerkingsmetode vir Linux-platforms.

epoll_events: Die waarde van hierdie richtlijn spesifiseer die aantal gebeure wat Nginx na die kern sal oordra.

Disk I / O

In hierdie afdeling sal ons asinchroniese I / O-aktiwiteit in Nginx opstel om dit effektief te kan oordra en die effektiwiteit van die kas te verbeter..

Disk I / O verwys bloot na skryf- en leesbewerkings tussen die hardeskyf en RAM. Ons sal gebruik maak van stuur lêer() funksioneer binne die kern om klein lêers te stuur.

U kan gebruik maak van die http-afdeling, liggingsafdeling en bedienergedeelte vir riglyne in hierdie gebied.

Die liggingsgedeelte, bedienergedeelte kan ingebed of binne die http-afdeling geplaas word om die konfigurasie leesbaar te maak.

Kopieer en plak die volgende kode binne die liggingsgedeelte wat in die HTTP-afdeling ingebed is.

ligging / pdf / {
sendfile aan;
aio aan;
}

ligging / klank / {
riglyn 4m
riglyn_belyning 512
}

sendfile: Stel die waarde van hierdie richtlijn op aan om gebruik te maak van die bestuurstelselbronne. sendfile dra data tussen lêerbeskrywers binne die OS-kernruimte oor sonder om dit na die toepassingsbuffers te stuur. Hierdie opdrag sal gebruik word om klein lêers te bedien.

opdrag: Hierdie richtlijn verbeter die effektiwiteit van die kas deur die lees en skryf direk na die aansoek toe te laat. directio is ‘n lêerstelselkenmerk van elke moderne bedryfstelsel. Hierdie opdrag sal gebruik word om groter lêers soos video’s te bedien.

aio: Hierdie richtlijn stel multi-threading in staat wanneer dit ingeskakel is vir skryf- en leesbewerking. Multi-threading is ‘n uitvoeringsmodel waarmee verskeie drade afsonderlik van mekaar kan uitvoer terwyl hulle hul gasheerprosesbronne deel.

directio_ignment: Hierdie richtlijn ken ‘n blokgrootte-waarde toe aan die data-oordrag. Dit hou verband met die richtlijn.

Netwerklaag

In hierdie afdeling sal ons gebruik maak van riglyne soos tcp_nodelay en tcp_nopush om te voorkom dat klein pakkies op ‘n bepaalde tydsraamwerk van ongeveer 200 millisekond wag voordat dit onmiddellik gestuur word..

As pakkies gewoonlik in ‘stukke’ oorgedra word, is dit geneig om die sterk gelaaide netwerk te versadig. Dus het John Nagle ‘n buffering algoritme om hierdie probleem op te los. Die doel van Nagle se bufferalgoritme is om te voorkom dat klein pakkies die sterk gelaaide netwerk versadig.

Kopieer en plak die volgende kode binne die HTTP-afdeling.

http {

tcp_nopush aan;
tcp_nodelay aan;

}

tcp_nodelay: Hierdie richtlijn is standaard gedeaktiveer om klein pakkies te laat wag vir ‘n bepaalde periode voordat dit tegelyk gestuur word. Hierdie richtlijn is ingeskakel om alle gegewens tegelyk gestuur te kan word.

tcp_nopush: Omdat ons die tcp_nodelay-richtlijn moontlik gemaak het, word klein pakkies dadelik gestuur. As u egter steeds van John Nagle se bufferalgoritme wil gebruik maak, kan ons die tcp_nopush ook in staat stel om pakkies bymekaar te voeg en alles tegelyk te stuur..

buffers

Kom ons kyk hoe u versoekbuffers in Nginx kan instel om versoeke effektief te hanteer. ‘N Buffer is ‘n tydelike berging waar data ‘n geruime tyd bewaar en verwerk word.

U kan die onderstaande in die bedienergedeelte kopieer.

bediener {

client_body_buffer_size 8k;
kliënt_max_body_ grootte 2m;
client_body_in_single_buffer aan;
client_body_temp_pathtemp_files 1 2;
kliënt_header_buffer_maat 1m;
large_client_header_buffers 4 8k;

}

Dit is belangrik om te verstaan ​​wat die bufferlyne doen.

client_body_buffer_size: Hierdie richtlijn stel die buffergrootte vir die versoekliggaam in. As u van plan is om die webbediener op 64-bis-stelsels te laat loop, moet u die waarde op 16k stel. As u die webbediener op die 32-bis-stelsel wil laat loop, stel die waarde op 8k.

client_max_body_size: As u van plan is om groot lêers te laai, moet u hierdie richtlijn op minstens 2 m of meer stel. Dit is standaard op 1 m ingestel.

client_body_in_file_only: As u die richtlijn client_body_buffer_size met die hashtag-simbool # gedeaktiveer het en hierdie richtlijn client_body_in_file_only is ingestel, sal Nginx dan versoekbuffers stoor in ‘n tydelike lêer. Dit word nie aanbeveel vir ‘n produksie-omgewing nie.

client_body_in_single_buffer: Soms word nie al die versoekliggame in ‘n buffer gestoor nie. Die res daarvan word gestoor of in ‘n tydelike lêer geskryf. As u egter van plan is om die volledige versoekbuffer in ‘n enkele buffer te stoor of op te slaan, moet u hierdie richtlijn aktiveer.

client_header_buffer_size: U kan hierdie richtlijn gebruik om ‘n buffer vir versoekopskrifte in te stel of toe te ken. U kan hierdie waarde op 1m stel.

large_client_header_buffers: hierdie richtlijn word gebruik om die maksimum aantal en grootte vir die lees van groot versoekopskrifte in te stel. U kan die maksimum aantal en buffergrootte presies op 4 en 8k stel.

Kompressie

Om die hoeveelheid data wat deur die netwerk oorgedra word saam te pers, is nog ‘n manier om te verseker dat u webbediener beter presteer. In hierdie afdeling maak ons ​​gebruik van riglyne soos gzip, gzip_comp_level en gzip_min_length om data saam te voeg.

Plak die volgende kode in die http-afdeling soos hieronder getoon:

http {

gzip aan;
gzip_comp_level 2;
gzip_min_lengte 1000;
gzip_tipes teks / xml teks / css;
gzip_http_version 1.1;
gzip_vary aan;
gzip_disable "MSIE [4-6] \.";

}

gzip: As u kompressie wil aktiveer, stel die waarde van hierdie richtlijn op aan. Dit is standaard gedeaktiveer.

gzip_comp_level: U kan van hierdie richtlijn gebruik maak om die kompressievlak in te stel. Om die CPU-hulpbronne nie te mors nie, hoef u die kompressievlak nie te hoog te stel nie. Tussen 1 en 9 kan u die kompressievlak op 2 of 3 stel.

gzip_min_length: Stel die minimum responslengte vir kompressie in via die veld van die responslengte-reaksie. U kan dit op meer as 20 grepe instel.

gzip_types: Met hierdie richtlijn kan u die responstipe kies wat u wil saamdruk. Standaard word die antwoordtipe teks / html altyd saamgepers. U kan ‘n ander tipe reaksie byvoeg, soos teks / css, soos hierbo aangedui.

gzip_http_version: Met hierdie richtlijn kan u die minimum HTTP-weergawe van ‘n versoek vir ‘n saamgeperste reaksie kies. U kan gebruik maak van die standaardwaarde wat 1.1 is.

gzip_vary: Wanneer gzip-richtlijn geaktiveer is, voeg hierdie richtlijn die kopveld Vari: Aanvaar kodering by die antwoord.

gzip_disabled: Sommige blaaiers soos Internet Explorer 6 het geen ondersteuning vir gzip-kompressie nie. In hierdie richtlijn word gebruik gemaak van die User-Agent-versoek-kopveld om kompressie vir sekere blaaiers te deaktiveer.

caching

Gebruik caching-funksies om die aantal kere te verminder om dieselfde data meerdere kere te laai. Nginx bied funksies om statiese inhoud metadata te stoor via open_file_cache-richtlijn.

U kan hierdie opdrag binne die bediener-, ligging- en http-afdeling plaas.

http {

open_file_cache max = 1.000 onaktief = 30s;
open_file_cache_valid 30s;
open_file_cache_min_uses 4;
open_file_cache_errors op;

}

open_file_cache: Hierdie richtlijn is standaard gedeaktiveer. Aktiveer dit as u caching in Nginx wil implementeer. Hierdie richtlijn stoor metadata van lêers en kaarte wat gebruikers gereeld versoek.

open_file_cache_valid: Hierdie richtlijn bevat rugsteuninligting binne die open_file_cache-richtlijn. U kan hierdie richtlijn gebruik om ‘n geldige periode in te stel, gewoonlik binne sekondes, waarna die inligting met betrekking tot lêers en kaarte weer bevestig word.

open_file_cache_min_uses: Nginx verwyder gewoonlik inligting binne die open_file_cache-richtlijn na ‘n periode van onaktiwiteit gebaseer op die open_file_cache_min_uses. U kan hierdie richtlijn gebruik om ‘n minimum aantal toegang in te stel om te identifiseer watter aktiewe lêers en kaarte beskikbaar is.

open_file_cache_errors: u kan van hierdie richtlijn gebruik maak om Nginx toe te laat om foute soos “toestemming geweier” of “kan nie toegang tot hierdie lêer verkry nie” te ontsluit wanneer toegang tot lêers verkry word. Dus, wanneer ‘n gebruiker wat nie die reg het om dit te doen nie, toegang tot ‘n hulpbron het, toon Nginx dieselfde foutverslag “toestemming geweier”.

tydverstreke

Stel time-out in met riglyne soos keepalive_timeout en keepalive_requests om te voorkom dat verbindings wat lank wag, hulpbronne vermors.

Kopieer en plak die volgende kode in die HTTP-afdeling:

http {

keepalive_timeout 30s;
keepalive_requests 30;
send_timeout 30s;

}

keepalive_timeout: hou verbindings ongeveer 30 sekondes lewendig. Die standaard is 75 sekondes.

keepalive_requests: Stel ‘n aantal versoeke in om vir ‘n spesifieke periode aan die lewe te bly. U kan die aantal versoeke op 20 of 30 stel.

keepalive_disable: gebruik hierdie richtlijn as u die houverbinding vir ‘n spesifieke groep blaaiers wil deaktiveer.

send_timeout: Stel ‘n time-out in vir die oordrag van data aan die kliënt.

Sekuriteitskonfigurasie vir Nginx

Die volgende fokus uitsluitlik op hoe u ‘n Nginx veilig kan instel in plaas van ‘n webtoepassing. Ons sal dus nie na webgebaseerde aanvalle soos SQL-inspuiting en so aan kyk nie.

In hierdie afdeling sal ons kyk hoe u die volgende kan opstel:

  • Beperk toegang tot lêers en kaarte
  • Stel logboeke op om kwaadwillige aktiwiteite te monitor
  • Voorkom DDoS
  • Deaktiveer gidslyste

Beperk toegang tot lêers en kaarte

Kom ons kyk hoe u toegang tot sensitiewe lêers en kaarte kan beperk deur die volgende metodes.

Deur gebruik te maak van HTTP-verifikasie

Ons kan toegang tot sensitiewe lêers of gebiede wat nie vir publieke besigtiging bedoel is nie, beperk deur gebruikers of selfs administrateurs te verifieer. Voer die volgende opdrag uit om ‘n hulpmiddel vir die skepping van ‘n wagwoordlêer te installeer as u dit nie geïnstalleer het nie.

geskik om te installeer – apache-gereedskap

Skep vervolgens ‘n wagwoordlêer en ‘n gebruiker met behulp van die htpasswd-instrument soos hieronder getoon. Die htpasswd-instrument word deur die apache2-hulpprogram aangebied.

sudo htpasswd -c / etc / apache2 / .htpasswd mike

U kan bevestig of u ‘n gebruiker en ‘n ewekansige wagwoord met die volgende opdrag suksesvol gemaak het

kat ens / apache2 / .htpasswd

Binne die liggingsgedeelte kan u die volgende kode plak om gebruikers te vra om verifikasie met behulp van die authentic_basic-richtlijn.

ligging / admin {

basic_auth "Admin Area";
autor_basic_user_file / etc / apache2 / .htpasswd;

}

Deur gebruik te maak van die Allow-richtlijn

Benewens die basiese_auth-richtlijn, kan ons gebruik maak van die toelaat-richtlijn om toegang te beperk.

Binne die liggingsgedeelte kan u die volgende kode gebruik om die gespesifiseerde IP-adresse toegang tot sensitiewe gebied te gee.

ligging / admin {
laat toe 192.168.34.12;
laat 192.168.12.34 toe;
}

Stel logboeke op om kwaadwillige aktiwiteite te monitor

In hierdie afdeling, sal ons foute en toegang logs opstel om spesifiek geldige en ongeldige versoeke te monitor. U kan hierdie logboeke ondersoek om uit te vind wie op ‘n spesifieke tydstip aangemeld het, of watter gebruiker toegang tot ‘n spesifieke lêer het en so aan.

error_log: stel u in staat om aan te meld by ‘n spesifieke lêer soos syslog of stderr. U kan ook die vlak van die foutboodskappe wat u wil aanmeld, spesifiseer.

access_log: laat gebruikers toe om aan die lêer toegang.log te vra

Binne die HTTP-afdeling kan u die volgende gebruik.

http {

access_log logs / access.log gekombineer;
error_log logs / warn.log waarsku;

}

Voorkom DDOS

U kan die Nginx teen ‘n DDOS-aanval beskerm deur die volgende metodes:

Beperkings van gebruikers beperk 

U kan gebruik maak van die limiet_req_zone en limiet_req-riglyne om die koers van ‘n versoek wat deur gebruikers gestuur word in enkele minute te beperk.

Voeg die volgende kode by in die liggingsgedeelte wat in die bedienergedeelte ingebed is.

limit_req_zone $ binary_remote_addr zone = one: 10m rate = 30r / m;

bediener {
ligging /admin.html {
limit_req zone = een;
}

}

Beperk die aantal verbindings 

U kan die riglyne limit_conn en limit_conn_zone gebruik om verbinding met sekere liggings of gebiede te beperk. Byvoorbeeld, die onderstaande kode ontvang 15 verbindings van kliënte vir ‘n spesifieke periode.

Die volgende kode gaan na die liggingsafdeling.

limit_conn_zone $ binary_remote_addr zone = addr: 10m;

bediener {

ligging / produkte / {
limit_conn addr 10;

}
}

Beëindig stadige verbindings   

U kan gebruik maak van time-out riglyne soos die client_body_timeout en client_header_timeout om te bepaal hoe lank Nginx sal wag vir skrywe vanaf die kliënteliggaam en kliëntkop.

Voeg die volgende in die bedienergedeelte.

bediener {
kliënt_body_timeout 5s;
client_header_timeout 5s;
}

Dit sal ook ‘n goeie idee wees om DDoS-aanvalle aan die rand te stop deur gebruik te maak van wolkgebaseerde oplossings soos hier genoem.

Deaktiveer gidslyste

U kan gebruik maak van die auto_index-richtlijn om gidslyste te voorkom, soos in die kode hieronder getoon. U moet dit op die waarde afskakel om gidslyste te deaktiveer.

ligging / {
outo_indeks af;
}

Afsluiting

Ons het Nginx-webbediener gekonfigureer om dit effektief uit te voer en te beskerm teen oormatige misbruik in ‘n produksie-omgewing. As u Nginx gebruik vir internet-toepassings op die internet, moet u dit ook oorweeg om ‘n CDN- en wolkgebaseerde sekuriteit te gebruik vir beter prestasie en sekuriteit.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map