Stillir Nginx fyrir afköst og öryggi

Í þessari kennslu munum við skoða hvernig við getum stillt Nginx vefþjón fyrir framleiðsluumhverfi.


Vefþjónn í framleiðsluumhverfi er frábrugðinn vefþjóni í prufuumhverfi hvað varðar afköst, öryggi og svo framvegis.

Sjálfgefið er að það er alltaf tilbúinn til notkunar stillingar fyrir Nginx vefþjóninn þegar þú hefur sett það upp. Samt sem áður er sjálfgefna stillingin ekki nógu góð fyrir framleiðsluumhverfi. Þess vegna munum við einbeita okkur að því hvernig á að stilla Nginx til að skila betri árangri meðan á þungum og venjulegum umferðarakstri stendur og hvernig á að tryggja það frá notendum sem hyggjast misnota það.

Ef þú hefur ekki sett upp Nginx á vélinni þinni geturðu athugað hvernig þú gerir það hér. Það sýnir þér hvernig á að setja upp Nginx á Unix palli. Veldu að setja Nginx í gegnum frumskrárnar vegna þess að fyrirframbyggt Nginx er ekki með nokkrum af einingunum sem notaðar eru í þessari kennslu..

Kröfur

Þú verður að hafa eftirfarandi sett upp á vélinni þinni og ganga úr skugga um að keyra þessa kennsluefni á hvaða Debian-undirstöðu vettvangi sem er, svo sem Ubuntu.

  • Ubuntu eða einhver annar Debian-undirstaða pallur
  • wget
  • Vim (textaritill)

Þú þarft einnig að keyra eða framkvæma nokkrar skipanir í þessari einkatími sem rót notandi með sudo skipuninni.

Að skilja uppbyggingu Nginx

Í þessum kafla munum við skoða eftirfarandi:

  • Uppbygging Nginx
  • Hlutar eins og atburður, HTTP og póstur
  • Gilt setningafræði Nginx

Í lok þessa kafla munt þú skilja uppbyggingu Nginx stillingar, tilgang eða hlutverk hluta og hvernig á að skilgreina gildar tilskipanir innan hluta.

Heil Nginx stillingarskráin er með rökrétta uppbyggingu sem samanstendur af tilskipunum sem eru flokkaðar í fjölda hluta svo sem atburðarhluta, http kafla, pósthluta og svo framvegis.

Aðalstillingarskráin er staðsett á /etc/nginx/nginx.conf meðan aðrar stillingarskrár eru á / etc / nginx.

Aðalsamhengi

Þessi hluti eða samhengi inniheldur tilskipanir utan tiltekinna hluta svo sem pósthlutans.

Allar aðrar tilskipanir eins og notandi nginx; , Verkamannaferli 1; , Error_log /var/log/nginx/error.log vara; og pid /var/run/nginx.pid er hægt að setja innan aðalhlutans eða samhengisins.

En sumar af þessum tilskipunum, svo sem starfsmannaferlunum, geta einnig verið fyrir hendi í atburðarhlutanum.

Hlutar

Hlutar í Nginx skilgreina stillingar fyrir Nginx einingar.

Til dæmis skilgreinir http hlutinn stillingar fyrir ngx_http_core eininguna, atburðarhlutinn skilgreinir stillingar fyrir ngx_event_module meðan pósthlutinn skilgreinir stillingar fyrir ngx_mail_module.

Þú getur athugað hér fyrir heildarlista yfir kafla í Nginx.

Tilskipanir

Tilskipanir í Nginx samanstanda af breytilegu nafni og fjölda rökra svo sem eftirfarandi:

Verkamaðurinn vinnur breytilegt nafn meðan farartækið þjónar sem rök.

verkamaður_ vinnur sjálfvirkt;

Tilskipunum lýkur með hálfkollu eins og sýnt er hér að ofan.

Að lokum verður Nginx stillingarskráin að fylgja ákveðnum reglum. Eftirfarandi eru gilt setningafræði fyrir Nginx stillingar:

  • Gildar tilskipanir byrja með breytilegu nafni og síðan fylgja einni eða fleiri rökum
  • Allar gildar tilskipanir ljúka með hálfkollu;
  • Hlutar eru skilgreindir með hrokkið axlabönd {}
  • Hægt er að fella hluta í annan hluta
  • Stillingar utan hvaða hluta sem er er hluti af Nginx alþjóðlegu stillingum.
  • Línurnar sem byrja með hassmerki # eru athugasemdir.

Stilla Nginx fyrir frammistöðu

Í þessum kafla munum við stilla Nginx til að skila betri árangri við mikla umferð og umferðarlengd.

Við munum skoða hvernig á að stilla:

  • Verkamenn
  • Diskur I / O virkni
  • Netvirkni
  • Buffarar
  • Samþjöppun
  • Skyndiminni
  • Hlé

Enn, inni í virka sýndarumhverfinu, sláðu inn eftirfarandi skipanir til að breyta í Nginx skrána og skrá innihald hennar.

CD nginx && ls

Leitaðu að möppuskránni Inni í þessari möppu er nginx.conf skráin.

Við munum nota þessa skrá til að stilla Nginx

Framkvæmdu núna eftirfarandi skipanir til að fara í conf möppuna og opna skrána nginx.conf með vim ritlinum

CD conf
sudo vim nginx.conf

Hér að neðan er skjámynd af því hvernig nginx.conf skráin lítur út sjálfgefið.

Verkamenn

Til að gera Nginx kleift að skila betri árangri, verðum við að stilla starfsmenn í atburðarhlutanum. Stilling Nginx starfsmanna gerir þér kleift að vinna úr tengingum frá viðskiptavinum á áhrifaríkan hátt.

Miðað við að þú hafir ekki lokað vim ritlinum, ýttu á i hnappinn á lyklaborðinu til að breyta nginx.conf skránni.

Afritaðu og límdu eftirfarandi inni í atburðarhlutanum eins og sýnt er hér að neðan:

atburðir {
verkamaður_ vinnur sjálfvirkt;
starfsmannasambönd 1024;
starfsmaður_rlimit_nofile 20960;
multi_accept á;
mutex_accept á;
mutex_accept_delay 500ms;
nota epoll;
epoll_events 512;
}

verkamannavinnsla: Þessi tilskipun stjórnar fjölda starfsmanna í Nginx. Gildi þessarar tilskipunar er stillt á sjálfvirkt til að leyfa Nginx að ákvarða fjölda algerlega, lausa diska, netþjóns og undirkerfi netkerfisins. Þú getur samt uppgötvað fjölda kjarna með því að keyra skipunina lscpu á flugstöðinni.

starfsmannasambönd: Þessi tilskipun setur gildi fjölda samtímis tenginga sem starfsmaður getur opnað. Sjálfgefið gildi er 512 en við stillum því á 1.024 til að leyfa einum starfsmanni að samþykkja miklu samtímis tengingu frá viðskiptavin.

worker_rlimit_nofile: Þessi tilskipun tengist einhvern veginn starfsmannasamböndum. Til að takast á við stór samtímis tengingu setjum við það á stórt gildi.

multi_accept: Þessi tilskipun gerir starfsmanni kleift að taka við mörgum tengingum í biðröð í einu. Biðröð í þessu samhengi þýðir einfaldlega röð gagnahluta sem bíða eftir að verða afgreidd.

mutex_accept: Þessi tilskipun er sjálfkrafa slökkt. En vegna þess að við höfum stillt marga starfsmenn í Nginx verðum við að kveikja á því eins og sýnt er í kóðanum hér að ofan til að leyfa starfsmönnum að taka við nýjum tengingum eitt af öðru.

mutex_accept_delay: Þessi tilskipun ákvarðar hversu lengi starfsmaður ætti að bíða áður en hann samþykkir nýja tengingu. Þegar kveikt er á accept_mutex er mutex-lás úthlutað starfsmanni fyrir þann tíma sem er tilgreindur af accept_mutex_delay. Þegar tímaramminn er liðinn er næsti starfsmaður í röðinni tilbúinn að taka við nýjum tengingum.

notkun: Þessi tilskipun tilgreinir aðferðina til að vinna úr tengingu frá viðskiptavininum. Í þessari kennsluáætlun ákváðum við að stilla gildið á epoll vegna þess að við erum að vinna á Ubuntu vettvang. Epoll aðferðin er áhrifaríkasta vinnsluaðferðin fyrir Linux palla.

epoll_events: Gildi þessarar tilskipunar tilgreinir fjölda atburða sem Nginx flytur yfir í kjarnann.

Diskur I / O

Í þessum kafla munum við stilla ósamstillta I / O virkni í Nginx til að leyfa honum að framkvæma skilvirka gagnaflutning og bæta skilvirkni skyndiminni.

Disk I / O vísar einfaldlega til að skrifa og lesa aðgerðir milli harða disksins og vinnsluminni. Við munum nýta okkur sendileit () virka inni í kjarnanum til að senda litlar skrár.

Þú getur notað http-hlutann, staðsetningarhlutann og netþjónahlutann fyrir tilskipanir á þessu svæði.

Hægt er að fella staðsetningarhlutann, miðlarahlutann eða setja hann innan http hlutans til að gera stillingarnar læsilegar.

Afritaðu og límdu eftirfarandi kóða inni á staðsetningarhlutanum sem er felldur inn í HTTP hlutann.

staðsetningu / pdf / {
sendafíl á;
aio á;
}

staðsetning / hljóð / {
tilskipun 4m
stefnuskrá 512
}

sendfile: Til að nýta auðlindir stýrikerfisins skaltu stilla gildi þessarar tilskipunar á. sendfile flytur gögn á milli skjalalýsinga innan OS kjarna rýmis án þess að senda þau til umsóknarduffa. Þessi tilskipun verður notuð til að þjóna litlum skrám.

tilskipun: Þessi tilskipun bætir skilvirkni skyndiminni með því að leyfa að lesa og skrifa til að senda beint til forritsins. tilskipun er skráarkerfisaðgerð í hverju nútímalegu stýrikerfi. Þessi tilskipun verður notuð til að þjóna stærri skrám eins og myndbönd.

aio: Þessi tilskipun gerir kleift að nota þráða þegar hún er stillt á til að skrifa og lesa. Margþráður er framkvæmdarlíkan sem gerir mörgum þræði kleift að framkvæma aðskildir frá hvor öðrum um leið og þeir deila með sér úrræðum um hýsingarferli.

tilskipun_skipun: Þessi tilskipun úthlutar gagnastærð gildi blokkarstærðar. Það tengdist tilskipunartilskipuninni.

Netlag

Í þessum kafla munum við nýta tilskipanir eins og tcp_nodelay og tcp_nopush til að koma í veg fyrir að smápakkar bíði eftir tilteknum tíma um það bil 200 millisekúndum áður en þeir eru sendir í einu.

Venjulega þegar pakkar eru fluttir í ‘stykki’ hafa þeir tilhneigingu til að metta hið mjög hlaðna net. Svo John Nagle byggði a biðminni reiknirit til að leysa þetta mál. Tilgangurinn með jöfnunarmiðstöð Nagle er að koma í veg fyrir að litlir pakkar metti hið mjög hlaðna net.

Afritaðu og límdu eftirfarandi kóða inn í HTTP hlutann.

http {

tcp_nopush á;
tcp_nodelay on;

}

tcp_nodelay: Þessi tilskipun er sjálfgefið óvirk til að leyfa litlum pakka að bíða í tiltekinn tíma áður en þær eru sendar í einu. Tilskipun er gerð virk til að leyfa öll gögn í einu.

tcp_nopush: Vegna þess að við höfum gert kleift tcp_nodelay tilskipun eru lítil pakkar sendir í einu. Hins vegar, ef þú vilt samt nýta jafnvægisreglur John Nagle, getum við einnig gert tcp_nopush kleift að setja pakka við hvert annað og sent þau í einu..

Buffarar

Við skulum líta á hvernig á að stilla beiðni biðminni í Nginx til að meðhöndla beiðnir á skilvirkan hátt. Buffer er tímabundin geymsla þar sem gögn eru geymd í nokkurn tíma og unnin.

Þú getur afritað neðangreint á netþjónahlutanum.

netþjónn {

client_body_buffer_size 8k;
client_max_body_size 2m;
client_body_in_single_buffer on;
client_body_temp_pathtemp_files 1 2;
client_header_buffer_size 1m;
large_client_header_buffers 4 8k;

}

Það er mikilvægt að skilja hvað þessar stuðpúðarlínur gera.

client_body_buffer_size: Þessi tilskipun setur stærð biðminni fyrir beiðnishópinn. Ef þú ætlar að keyra netþjóninn á 64 bita kerfum þarftu að stilla gildið á 16k. Ef þú vilt keyra netþjóninn á 32-bita kerfinu skaltu stilla gildið á 8k.

client_max_body_size: Ef þú ætlar að meðhöndla stórar skrár sem hlaðið er inn þarftu að stilla þessa tilskipun að minnsta kosti 2m eða meira. Sjálfgefið er að það sé stillt á 1 m.

client_body_in_file_only: Ef þú hefur slökkt á tilskipuninni client_body_buffer_size með hashtag tákninu # og þessi tilskipun client_body_in_file_only er stillt mun Nginx vista beiðnarhólf í tímabundna skrá. Ekki er mælt með þessu fyrir framleiðsluumhverfi.

client_body_in_single_buffer: Stundum er ekki allur beiðnaraðilinn geymdur í biðminni. Afgangurinn er vistaður eða skrifaður í tímabundna skrá. Hins vegar, ef þú ætlar að vista eða geyma allan biðminni í einum biðminni þarftu að virkja þessa tilskipun.

client_header_buffer_size: Þú getur notað þessa tilskipun til að stilla eða úthluta biðminni fyrir haus beiðna. Þú getur stillt þetta gildi á 1 m.

large_client_header_buffers: Þessi tilskipun er notuð til að stilla hámarksfjölda og stærð til að lesa stóra beiðnihausa. Þú getur stillt hámarksfjölda og biðstærð nákvæmlega á 4 og 8k.

Samþjöppun

Að þjappa gögnum sem flutt eru yfir netið er önnur leið til að tryggja að vefþjóninn þinn skili betri árangri. Í þessum kafla munum við nota tilskipanir eins og gzip, gzip_comp_level og gzip_min_length til að þjappa gögnum.

Límdu eftirfarandi kóða inni á http hlutanum eins og sýnt er hér að neðan:

http {

gzip á;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_types text / xml text / css;
gzip_http_version 1.1;
gzip_vary á;
gzip_deyfanlegur "MSIE [4-6] \.";

}

gzip: Ef þú vilt virkja samþjöppun, stilltu gildi þessarar tilskipunar á. Sjálfgefið er að það er óvirk.

gzip_comp_level: Þú getur notað þessa tilskipun til að stilla samþjöppunarstigið. Til að eyða ekki CPU-auðlindum þarftu ekki að stilla samþjöppunarstigið of hátt. Milli 1 og 9 geturðu stillt samþjöppunarstigið á 2 eða 3.

gzip_min_length: Stilla lágmarks svörunarlengd fyrir samþjöppun með svörunarhaus reitnum fyrir innihaldslengd. Þú getur stillt það á meira en 20 bæti.

gzip_types: Þessi tilskipun gerir þér kleift að velja svar tegund sem þú vilt þjappa. Sjálfgefið er að svar textans / html er alltaf þjappað. Þú getur bætt við annarri svörunargerð eins og texta / css eins og sýnt er í kóðanum hér að ofan.

gzip_http_version: Þessi tilskipun gerir þér kleift að velja lágmarks HTTP útgáfu af beiðni um þjappað svar. Þú getur nýtt sjálfgefið gildi sem er 1.1.

gzip_vary: Þegar gzip tilskipun er virk, bætir þessi tilskipun við hausreitnum Varískt: Samþykkja kóðun við svarið.

gzip_disabled: Sumir vafrar eins og Internet Explorer 6 hafa ekki stuðning við gzip samþjöppun. Með þessari tilskipun er notast við reitinn User-Agent beiðnihaus til að slökkva á samþjöppun fyrir tiltekna vafra.

Skyndiminni

Nýttu skyndiminni aðgerðir til að fækka sinnum til að hlaða sömu gögn margfalt. Nginx býður upp á aðgerðir til að skyndiminni myndræna innihald skyndiminni í gegnum tilskipun open_file_cache.

Þú getur sett þessa tilskipun inni á netþjóninn, staðsetningu og http hlutanum.

http {

open_file_cache max = 1.000 óvirk = 30;
open_file_cache_valid 30s;
open_file_cache_min_uses 4;
open_file_cache_errors on;

}

open_file_cache: Þessi tilskipun er sjálfgefin óvirk. Virkja það ef þú vilt útfæra skyndiminni í Nginx. Þessi tilskipun geymir lýsigögn skráa og möppur sem notendur biðja um.

open_file_cache_valid: Þessi tilskipun inniheldur upplýsingar um öryggisafrit inni í open_file_cache tilskipuninni. Þú getur notað þessa tilskipun til að setja gilt tímabil venjulega í sekúndum eftir að upplýsingar sem tengjast skrám og möppum eru staðfestar aftur.

open_file_cache_min_uses: Nginx hreinsar venjulega upplýsingar inni í open_file_cache tilskipuninni eftir aðgerðaleysi á grundvelli open_file_cache_min_uses. Þú getur notað þessa tilskipun til að stilla lágmarks fjölda aðgangs til að bera kennsl á hvaða skrár og möppur eru virkir aðgengilegar.

open_file_cache_errors: Þú getur notað þessa tilskipun til að leyfa Nginx að skynda skyndiminni eins og „leyfi neitað“ eða „hefur ekki aðgang að þessari skrá“ þegar skrár eru opnaðar. Svo hvenær sem notandi sem hefur ekki rétt á því að fá aðgang að auðlind, sýnir Nginx sömu villuskýrslu „leyfi hafnað“.

Hlé

Stilla tímamörk með tilskipunum eins og keepalive_timeout og keepalive_requests til að koma í veg fyrir að langvarandi tengingar eyðileggi auðlindir.

Í HTTP hlutanum, afritaðu og límdu eftirfarandi kóða:

http {

keepalive_timeout 30s;
keepalive_requests 30;
send_timeout 30s;

}

keepalive_timeout: Haltu tengingum lifandi í um það bil 30 sekúndur. Sjálfgefið er 75 sekúndur.

keepalive_requests: Stilla fjölda beiðna um að halda lífi í tiltekinn tíma. Þú getur stillt fjölda beiðna á 20 eða 30.

keepalive_disable: ef þú vilt slökkva á keepalive tengingu fyrir ákveðinn hóp vafra, notaðu þessa tilskipun.

send_timeout: Stilla tímamörk til að senda gögn til viðskiptavinarins.

Öryggisstilling fyrir Nginx

Eftirfarandi einblínir eingöngu á hvernig á að stilla Nginx á öruggan hátt í stað vefforrits. Þannig munum við ekki skoða árásir á netinu eins og SQL sprautu og svo framvegis.

Í þessum kafla munum við skoða hvernig á að stilla eftirfarandi:

  • Takmarka aðgang að skrám og möppum
  • Stilla annál til að fylgjast með skaðlegum athöfnum
  • Koma í veg fyrir DDoS
  • Slökkva á skráaskráningu

Takmarka aðgang að skrám og möppum

Við skulum skoða hvernig á að takmarka aðgang að viðkvæmum skrám og möppum með eftirfarandi aðferðum.

Með því að nota HTTP sannvottun

Við getum takmarkað aðgang að viðkvæmum skrám eða svæðum sem ekki eru ætluð til skoðunar almennings með því að biðja um sannvottun frá notendum eða jafnvel stjórnendum. Keyraðu eftirfarandi skipun til að setja upp lykilorðabúnað til að búa til lykilorð ef þú hefur ekki sett það upp.

apt-get install -y apache-utils

Næst skaltu búa til lykilorðaskrá og notanda með htpasswd tólinu eins og sýnt er hér að neðan. Htpasswd tólið er veitt af apache2-utils tólinu.

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

Þú getur staðfest hvort þú hefur búið til notanda og handahófi lykilorð með eftirfarandi skipun

köttur etc / apache2 / .htpasswd

Inni í staðsetningarhlutanum getur þú límt eftirfarandi kóða til að biðja notendur um sannvottun með því að nota autor_basic tilskipunina.

staðsetning / stjórnandi {

basic_auth "Stjórnandi svæði";
autor_basic_user_file / etc / apache2 / .htpasswd;

}

Með því að nota Leyfa tilskipunina

Til viðbótar við tilskipun basic_auth getum við nýtt okkur leyfi tilskipunina til að takmarka aðgang.

Inni í staðsetningarhlutanum er hægt að nota eftirfarandi kóða til að leyfa tilgreindum IP-tölum að fá aðgang að viðkvæmu svæði.

staðsetning / stjórnandi {
leyfa 192.168.34.12;
leyfa 192.168.12.34;
}

Stilla annál til að fylgjast með skaðlegum athöfnum

Í þessum kafla munum við stilla villu- og aðgangsskrár til að fylgjast sérstaklega með gildum og ógildum beiðnum. Þú getur skoðað þessar notkunarskrár til að komast að því hver skráði þig inn á tilteknum tíma, eða hvaða notandi aðgangur að tiltekinni skrá og svo framvegis.

error_log: Gerir þér kleift að setja upp skógarhögg í tiltekna skrá eins og syslog eða stderr. Þú getur einnig tilgreint stig villuboðanna sem þú vilt skrá þig inn.

access_log: Leyfir að skrifa notendum beiðni um skrána access.log

Inni í HTTP hlutanum geturðu notað eftirfarandi.

http {

access_log logs / access.log sameina;
error_log logs / warn.log vara;

}

Koma í veg fyrir DDOS

Þú getur verndað Nginx gegn DDOS árás með eftirfarandi aðferðum:

Takmarka beiðnir notenda 

Þú getur notað tilskipanirnar limit_req_zone og limit_req til að takmarka gengi beiðni sem notendur hafa sent á nokkrum mínútum.

Bættu við eftirfarandi kóða í staðsetningarhlutann sem er felldur inn á netþjónahlutann.

limit_req_zone $ binary_remote_addr zone = einn: 10m hraði = 30r / m;

netþjónn {
staðsetningu /admin.html {
limit_req svæði = eitt;
}

}

Takmarkaðu fjölda tenginga 

Þú getur notað tilskipanirnar limit_conn og limit_conn_zone til að takmarka tengingu við ákveðna staði eða svæði. Til dæmis fær kóðinn hér að neðan 15 tengingu frá viðskiptavinum fyrir tiltekið tímabil.

Eftirfarandi kóða fer í staðsetningarhlutann.

limit_conn_zone $ binary_remote_addr zone = addr: 10m;

netþjónn {

staðsetning / vörur / {
limit_conn addr 10;

}
}

Ljúka hægt tengingum   

Þú getur notað tilskipanir um tímamörk eins og client_body_timeout og client_header_timeout til að stjórna hversu lengi Nginx mun bíða eftir skrifum frá skjólstæðingnum og haus viðskiptavinarins.

Bættu við eftirfarandi í netþjónahlutanum.

netþjónn {
client_body_timeout 5s;
client_header_timeout 5s;
}

Það væri líka góð hugmynd að stöðva DDoS árásir í jaðrinum með því að nýta sér ský byggðar lausnir eins og hér er getið.

Slökkva á skráaskráningu

Þú getur notað tilskipunina auto_index til að koma í veg fyrir skráaskráningu eins og sýnt er í kóðanum hér að neðan. Þú verður að stilla það á gildi burt til að slökkva á skráaskráningu.

staðsetning / {
slökkt á auto_index;
}

Niðurstaða

Við höfum stillt Nginx netþjóninn til að framkvæma á áhrifaríkan hátt og tryggja hann gegn óhóflegri misnotkun í framleiðsluumhverfi. Ef þú ert að nota Nginx fyrir netforrit sem snúa að internetinu, ættir þú einnig að íhuga að nota CDN og skýjabundið öryggi til að ná betri árangri og öryggi.

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