Ebben az oktatóanyagban megvizsgáljuk, hogyan konfigurálhatjuk az Nginx webszervert egy termelési környezethez.

A termelési környezetben található webszerver teljesítmény, biztonság és így tovább különbözik a tesztkörnyezetben található webszervertől.

Alapértelmezés szerint mindig rendelkezésre áll egy kész konfigurációs beállítás az Nginx webszerverhez, miután sikeresen telepítette. Az alapértelmezett konfiguráció azonban nem elég jó a termelési környezethez. Ezért arra összpontosítunk, hogy hogyan konfigurálhatjuk az Nginx-et jobb teljesítményre a nehéz és normál forgalom esetén, és hogyan lehet megvédeni azt a felhasználóktól, akik visszaélni szándékoznak.

Ha még nem telepítette az Nginx-et a számítógépére, itt ellenőrizheti, hogyan kell ezt megtenni. Megmutatja, hogyan kell telepíteni az Nginx-et Unix platformon. Az Nginx telepítését válassza a forrásfájlokon keresztül, mert az előre beépített Nginx nem tartozik az ebben az oktatóprogramban használt modulok egy részéhez.

követelmények

Telepítenie kell a következőket a számítógépére, és győződjön meg arról, hogy ezt az oktatóprogramot minden Debian-alapú platformon, például az Ubuntu-ban futtatja..

  • Ubuntu vagy bármely más Debian-alapú platform
  • wget
  • Vim (szövegszerkesztő)

Ezenkívül a sudo paranccsal gyökér felhasználóként futtatnia kell vagy végre kell hajtania az útmutató néhány parancsát.

Az Nginx Config felépítésének megértése

Ebben a szakaszban a következőket vizsgáljuk:

  • Az Nginx felépítése
  • Olyan szakaszok, mint egy esemény, HTTP és e-mail
  • A Nginx érvényes szintaxisa

E szakasz végén megérti az Nginx konfigurációjának felépítését, a szakaszok célját vagy szerepeit, valamint azt, hogy miként határozható meg a érvényes irányelvek a szakaszokon belül.

A teljes Nginx konfigurációs fájl logikai struktúrájú, amely több részre osztott irányelvekből áll, mint például az esemény szakasz, a http szakasz, a levél szakasz és így tovább.

Az elsődleges konfigurációs fájl az /etc/nginx/nginx.conf címen található, míg a többi konfigurációs fájl az / etc / nginx fájlban található..

Fő háttér

Ez a szakasz vagy kontextus direktívakat tartalmaz bizonyos szakaszokon, például a levél szakaszon kívül.

Egyéb irányelvek, például az nginx felhasználó; , 1. munkafolyamat; , Error_log /var/log/nginx/error.log figyelmeztetés; és a pid /var/run/nginx.pid elhelyezhető a fő részben vagy a környezetben.

De ezen irányelvek némelyike, például a munkamegfigyelési folyamatok is létezhetnek az esemény szakaszban.

szakaszok

Az Nginx szakaszai megadják az Nginx modulok konfigurációját.

Például a http szakasz határozza meg az ngx_http_core modul konfigurációját, az esemény szakasz az ngx_event_module konfigurációját, míg az e-mail szakasz az ngx_mail_module konfigurációját határozza meg..

Ellenőrizheted itt az Nginx szakaszok teljes listájához.

irányelvek

Az Nginx irányelvei változó névből és számos érvből állnak, mint például a következők:

A munkafolyamatok egy változó név, míg az auto érvként szolgál.

automatikus munkafolyamatok;

Az irányelvek a fenti ábra szerint pontosvesszővel zárulnak.

Végül, az Nginx konfigurációs fájlnak meg kell felelnie egy adott szabálykészletnek. A következők tartalmazzák az Nginx konfiguráció érvényes szintaxisát:

  • Az érvényes irányelvek változó névvel kezdődnek, majd egy vagy több argumentumot követnek
  • Az összes érvényes irányelv pontosvesszővel végződik;
  • A metszeteket göndör kapcsokkal határozzuk meg {}
  • Egy szakasz beágyazható egy másik szakaszba
  • A bármely szakaszon kívüli konfiguráció az Nginx globális konfigurációjának része.
  • A # hash jelzéssel kezdődő sorok megjegyzés.

Az Nginx hangolása a teljesítmény érdekében

Ebben a szakaszban az Nginx-et úgy konfiguráljuk, hogy jobban teljesítsen a nehéz forgalom és a forgalom növekedése esetén.

Megvizsgáljuk, hogyan kell konfigurálni:

  • Dolgozók
  • Lemez I / O tevékenység
  • Hálózati tevékenység
  • Pufferek
  • összenyomás
  • gyorsítótárral
  • Időtúllépés

Mégis, az aktivált virtuális környezetben írja be a következő parancsokat, hogy az Nginx könyvtárba váltson, és felsorolja annak tartalmát.

CD nginx && ls

Keresse meg a konf. Mappát Ebben a mappában található az nginx.conf fájl.

Ezt a fájlt használjuk az Nginx konfigurálására

Most hajtsa végre a következő parancsokat, hogy keresse meg a conf mappát, és nyissa meg az nginx.conf fájlt a vim szerkesztővel

cd conf
sudo vim nginx.conf

Az alábbiakban egy képernyőképet mutatunk be, hogyan néz ki alapértelmezés szerint az nginx.conf fájl.

Dolgozók

Annak érdekében, hogy az Nginx jobban teljesítsen, konfigurálnunk kell a dolgozókat az események szakaszban. Az Nginx dolgozók konfigurálása lehetővé teszi az ügyfelekkel történő kapcsolatok hatékony feldolgozását.

Feltéve, hogy nem zárta be a vim szerkesztőt, nyomja meg a billentyűzet i gombját az nginx.conf fájl szerkesztéséhez.

Másolja és illessze be a következőket az események szakaszába az alább látható módon:

események {
automatikus munkafolyamatok;
worker_connections 1024;
worker_rlimit_nofile 20960;
multi_accep on;
mutex_accept on;
mutex_accept_delay 500ms;
használja az epoll-t;
epoll_events 512;
}

worker_processes: Ez az irányelv szabályozza a Nginxben dolgozók számát. Ennek az irányelvnek az értéke automatikusan van beállítva, hogy az Nginx meghatározza a rendelkezésre álló magok számát, a lemezeket, a szerver betöltését és a hálózati alrendszert. A magok számát azonban felfedezheti az lscpu parancs végrehajtásával a terminálon.

munkamegszakítások: Ez az irányelv meghatározza az egyidejű csatlakozások számát, amelyet a munkavállaló megnyithat. Az alapértelmezett érték 512, de azt 1024-re állítottuk, hogy az egyik munkavállaló sokkal egyidejűbb kapcsolatot fogadjon el az ügyféltől.

worker_rlimit_nofile: Ez az irányelv valamilyen módon kapcsolódik a worker_connections-hez. A nagy egyidejű kapcsolat kezelése érdekében nagy értéket állítottunk be.

multi_accept: Ez az irányelv lehetővé teszi a munkavállaló számára, hogy egyszerre több kapcsolatot fogadjon el a sorban. A sor ebben az összefüggésben egyszerűen azt jelenti, hogy az adatobjektumok sorozata vár feldolgozásra.

mutex_accept: Ez az irányelv alapértelmezés szerint ki van kapcsolva. Mivel azonban sok munkavállalót konfiguráltunk Nginxben, be kell kapcsolnunk a fenti kódban bemutatottak szerint, hogy a munkavállalók egyenként új kapcsolatokat fogadjanak el..

mutex_accept_delay: Ez az irányelv meghatározza, mennyi ideig kell a munkavállalónak várnia, mielőtt elfogadja az új kapcsolatot. Miután az accept_mutex be van kapcsolva, a mutex zár hozzárendelésre kerül a munkavállaló számára az accept_mutex_delay által megadott időtartamra. Amikor az időkeret lejár, a sorban lévő következő munkavállaló kész új kapcsolatok elfogadására.

használat: Ez az irányelv meghatározza a kapcsolat kliensből történő feldolgozásának módszerét. Ebben az oktatóanyagban úgy döntöttünk, hogy az epoll értékét állítjuk be, mert Ubuntu platformon dolgozunk. Az epoll módszer a leghatékonyabb feldolgozási módszer Linux platformon.

epoll_events: Ennek az irányelvnek az értéke határozza meg az események számát, amelyet az Nginx továbbít a kernelhez.

Lemez I / O

Ebben a szakaszban az aszinkron I / O tevékenységet konfiguráljuk az Nginxben, hogy ez lehetővé tegye a hatékony adatátvitelt és javítsa a gyorsítótár hatékonyságát.

A Disk I / O egyszerűen a merevlemez és a RAM közötti írási és olvasási műveletekre utal. Fogjuk használni sendfile () függvény a kernel belsejében kis fájlok küldésére.

Ezen a területen az irányelvekhez a http szakasz, a hely szakasz és a kiszolgáló szakasz használható.

A helyrész, a szerverrész beágyazható vagy elhelyezhető a http szakaszban, hogy a konfiguráció olvasható legyen.

Másolja és illessze be a következő kódot a HTTP szakaszba beágyazott helyszakaszba.

hely / pdf / {
sendfile on;
aio on;
}

hely / hang / {
Directio 4m
directio_alignment 512
}

sendfile: Az operációs rendszer erőforrásainak használatához állítsa be ezen irányelv értékét. sendfile továbbítja az adatokat az OS kernelterületen lévő fájlleírók között anélkül, hogy az alkalmazáspufferekbe továbbítaná azokat. Ezt az irányelvet kis fájlok kiszolgálására fogják használni.

directio: Ez az irányelv javítja a gyorsítótár hatékonyságát azáltal, hogy lehetővé teszi az olvasás és írás elküldését közvetlenül az alkalmazáshoz. A directio minden modern operációs rendszer fájlrendszer-jellemzője. Ezt az irányelvet nagyobb fájlok – például videók – kiszolgálására fogják használni.

aio: Ez az irányelv lehetővé teszi a többszálú menetet, ha be van kapcsolva az írás és olvasás működéséhez. A többszálú végrehajtás olyan modell, amely lehetővé teszi, hogy több szál egymástól külön-külön végrehajtson, miközben megosztja tárhelyi folyamataik erőforrásait.

directio_alignment: Ez az irányelv blokkméret értéket rendel az adatátvitelhez. Ez kapcsolódott a directio irányelvhez.

Hálózati réteg

Ebben a szakaszban olyan irányelveket fogunk használni, mint a tcp_nodelay és a tcp_nopush, hogy megakadályozzuk, hogy a kiscsomagok mintegy 200 milliszekundumú meghatározott időkeretet várakozzanak, mielőtt egyszerre elküldik őket..

Általában, amikor a csomagokat „darabonként” továbbítják, hajlamosak telítetteni a magasan betöltött hálózatot. Tehát John Nagle a pufferelési algoritmus hogy megoldja ezt a problémát. A Nagle pufferelési algoritmusának célja az, hogy megakadályozza a kis csomagok telítettségét a magasan betöltött hálózatban.

Másolja és illessze be a következő kódot a HTTP szakaszba.

http {

tcp_nopush be;
tcp_nodelay on;

}

tcp_nodelay: Ez az irányelv alapértelmezés szerint le van tiltva, lehetővé téve a kiscsomagok számára, hogy egy meghatározott ideig várjanak meg, mielőtt egyszerre elküldik őket. Annak érdekében, hogy az összes adatot egyszerre el lehessen küldeni, ez az irányelv engedélyezve van.

tcp_nopush: Mivel engedélyeztük a tcp_nodelay irányelvet, a kis csomagokat egyszerre küldjük el. Ha azonban továbbra is használni szeretné John Nagle pufferelési algoritmusát, akkor engedélyezhetjük a tcp_nopush csomagokat is egymáshoz adására és egyszerre küldésére..

Pufferek

Vessünk egy pillantást arra, hogyan állítsuk be a kérési puffereket az Nginxben a kérelmek hatékony kezelése érdekében. A puffer egy ideiglenes tárolóhely, ahol az adatokat egy ideig megőrzik és feldolgozzák.

Az alábbiakat a kiszolgáló szakaszban másolhatja.

szerver {

client_body_buffer_size 8k;
client_max_body_size 2m;
client_body_in_single_buffer on;
kliens_test_temp_pathtemp_ fájlok 1 2;
client_header_buffer_size 1m;
large_client_header_buffers 4 8k;

}

Fontos megérteni, hogy ezek a puffervonalak mit csinálnak.

client_body_buffer_size: Ez az irányelv állítja be a puffer méretét a kérés törzséhez. Ha a webszervert 64 bites rendszeren szeretné futtatni, akkor az értéket 16k-ra kell állítania. Ha a webszervert 32 bites rendszeren szeretné futtatni, állítsa az értéket 8k értékre.

client_max_body_size: Ha nagy fájlfeltöltéseket kíván kezelni, akkor ezt az irányelvet legalább 2 méterre vagy annál nagyobbra kell állítania. Alapértelmezés szerint ez 1m-re van állítva.

client_body_in_file_only: Ha letiltotta az client_body_buffer_size irányelvet a # hashtag szimbólummal, és ez az ügyfél_body_in_file_only irányelv be van állítva, az Nginx ezután ideiglenes fájlba menti a kérelem puffereit. Ez nem ajánlott termelési környezethez.

client_body_in_single_buffer: Időnként nem minden kérés törzsét tárolja pufferben. A fennmaradó részt menti vagy ideiglenes fájlba írja. Ha azonban a teljes kérési puffert egyetlen pufferben kívánja elmenteni vagy tárolni, engedélyeznie kell ezt az irányelvet.

client_header_buffer_size: Ezt az irányelvet felhasználhatja puffer beállítására vagy kiosztására a kérelem fejléceihez. Ezt az értéket 1m-re állíthatja.

large_client_header_buffers: Ezt az irányelvet lehet használni a maximális szám és méret beállításához a nagy kérés fejlécek olvasásához. A maximális számot és pufferméretet pontosan 4-re és 8-ra állíthatja.

összenyomás

A hálózaton átvitt adatok mennyiségének tömörítése egy másik módszer a webszerver jobb teljesítményének biztosítására. Ebben a szakaszban olyan irányelveket fogunk használni, mint a gzip, gzip_comp_level és gzip_min_length az adatok tömörítéséhez..

Illessze be a következő kódot a http szakaszba az alább látható módon:

http {

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

}

gzip: Ha engedélyezni kívánja a tömörítést, akkor kapcsolja be ezen irányelv értékét. Alapértelmezés szerint le van tiltva.

gzip_comp_level: Ezt az irányelvet felhasználhatja a tömörítési szint beállítására. Annak érdekében, hogy ne pazarolja a CPU-erőforrásokat, nem kell túl magasra állítania a tömörítési szintet. 1 és 9 között beállíthatja a tömörítési szintet 2 vagy 3 értékre.

gzip_min_length: Állítsa be a tömörítés minimális válaszhosszát a tartalomhossz válaszfejléc mezőn keresztül. Több mint 20 bájtot állíthat be.

gzip_types: Ez az irányelv lehetővé teszi a tömöríteni kívánt választípus kiválasztását. Alapértelmezés szerint a válasz / text / html típus mindig tömörítve van. Felvehet más választípust, például szöveget / css-t is, a fenti kód szerint.

gzip_http_version: Ez az irányelv lehetővé teszi a tömörített válaszra vonatkozó kérelem minimális HTTP verziójának kiválasztását. Használhatja az alapértelmezett értéket, amely 1.1.

gzip_vary: Ha a gzip irányelv engedélyezve van, ez az irányelv hozzáfűzi a fejléc mezőt: Vary: Accept Encoding a válaszhoz.

gzip_disabled: Egyes böngészők, például az Internet Explorer 6, nem támogatják a gzip tömörítést. Ez az irányelv a User-Agent kérelem fejlécét használja az egyes böngészők tömörítésének letiltásához.

gyorsítótárral

Használja ki a gyorsítótárazási funkciókat az azonos adatok többszöri betöltésének hányszor történő csökkentése érdekében. Az Nginx szolgáltatásokat nyújt a statikus tartalom metaadatainak gyorsítótárazásához az open_file_cache irányelv útján.

Ezt az irányelvet elhelyezheti a szerver, a hely és a http szakaszban.

http {

open_file_cache max = 1000 inaktív = 30 másodperc;
open_file_cache_valid 30s;
open_file_cache_min_uses 4;
open_file_cache_errors on;

}

open_file_cache: Ez az irányelv alapértelmezés szerint le van tiltva. Engedélyezze, ha a gyorsítótárazást Nginxben szeretné. Ez az irányelv a felhasználók által általában kért fájlok és könyvtárak metaadatait tárolja.

open_file_cache_valid: Ez az irányelv biztonsági mentési információkat tartalmaz az open_file_cache irányelvben. Ez az irányelv felhasználható egy érvényes időszak megadására, általában másodpercben, amely után a fájlokkal és könyvtárakkal kapcsolatos információk újra érvényesülnek.

open_file_cache_min_uses: Az Nginx általában az Open_file_cache irányelvben szereplő információkat törli az Open_file_cache_min_uses alapú inaktivitási időszak után. Ezen irányelv használatával beállíthatja a hozzáférés minimális számát annak meghatározásához, hogy mely fájlokhoz és könyvtárakhoz férnek hozzá aktívan.

open_file_cache_errors: Ezt az irányelvet kihasználva engedélyezheti az Nginx számára a gyorsítótár-hibákat, például „engedély megtagadva” vagy „nem tudom elérni ezt a fájlt” fájlok elérésekor. Tehát bármikor, amikor egy erőforráshoz olyan felhasználó fér hozzá, aki nem rendelkezik erre jogosultsággal, az Nginx ugyanazt a hibajelentést jeleníti meg: “engedély megtagadva”.

Időtúllépés

Konfigurálja az időtúllépést olyan irányelvekkel, mint a keepalive_timeout és a keepalive_requests, hogy megakadályozzák a hosszú várakozású kapcsolatok erőforrások pazarlását.

A HTTP szakaszban másolja és illessze be a következő kódot:

http {

keepalive_timeout 30s;
keepalive_requests 30;
send_timeout 30s;

}

keepalive_timeout: Tartsa életben a kapcsolatokat kb. 30 másodpercig. Az alapértelmezett érték 75 másodperc.

keepalive_requests: Konfiguráljon számos kérést, hogy egy adott ideig életben maradjon. A kérelmek számát 20-ra vagy 30-ra állíthatja.

keepalive_disable: Ha le szeretné tiltani a folyamatos kapcsolatot a böngészők egy meghatározott csoportjánál, akkor használja ezt az irányelvet.

send_timeout: Állítson be időt az adatok továbbításához az ügyfél számára.

Az Nginx biztonsági konfigurációja

Az alábbiakban csak arra koncentrálunk, hogyan lehet biztonságosan konfigurálni az Nginx-et egy webalkalmazás helyett. Ezért nem fogjuk megvizsgálni az olyan web alapú támadásokat, mint az SQL injektálás és így tovább.

Ebben a szakaszban megvizsgáljuk, hogyan konfigurálhatjuk a következőket:

  • Korlátozza a fájlokhoz és könyvtárakhoz való hozzáférést
  • Naplók konfigurálása a rosszindulatú tevékenységek figyelésére
  • Megakadályozzuk a DDoS-t
  • Letiltja a könyvtár felsorolását

Korlátozza a fájlokhoz és könyvtárakhoz való hozzáférést

Nézzük meg, hogyan lehet az alábbi módszerekkel korlátozni az érzékeny fájlokhoz és könyvtárakhoz való hozzáférést.

A HTTP-hitelesítés felhasználásával

A nyilvános megtekintésre szánt, érzékeny fájlokhoz vagy területekhez való hozzáférést korlátozhatjuk a felhasználóktól vagy akár a rendszergazdáktól történő hitelesítés kérésével. Futtassa a következő parancsot egy jelszófájl-létrehozási segédprogram telepítéséhez, ha még nem telepítette.

apt-get install -y apache-utils

Ezután hozzon létre egy jelszó fájlt és egy felhasználót a htpasswd eszköz segítségével, az alább látható módon. A htpasswd eszközt az apache2-utils segédprogram biztosítja.

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

A következő paranccsal megerősítheti, hogy sikeresen létrehozott-e felhasználói és véletlenszerű jelszót

macska stb. / apache2 / .htpasswd

A hely részben beillesztheti a következő kódot, hogy a felhasználókat hitelesítésre kérje az auth_basic irányelv használatával.

hely / admin {

basic_auth "Rendszergazda terület";
auth_basic_user_file / etc / apache2 / .htpasswd;

}

Az Engedélyezési irányelv felhasználásával

Az basic_auth irányelv mellett az engedélyezésről szóló irányelvet is felhasználhatjuk a hozzáférés korlátozására.

A helyszakaszban az alábbi kódot használhatja, hogy a megadott IP-címek hozzáférhessenek az érzékeny területekhez.

hely / admin {
engedje 192,168,34,12;
engedélyezzük: 192.168.12.34;
}

Naplók konfigurálása a rosszindulatú tevékenységek figyelésére

Ebben a szakaszban a hiba- és hozzáférési naplókat konfiguráljuk az érvényes és érvénytelen kérelmek konkrét figyelésére. Megvizsgálhatja ezeket a naplókat, hogy megtudja, ki jelentkezett be egy adott időpontban, vagy melyik felhasználó fér hozzá egy adott fájlhoz, és így tovább.

error_log: Lehetővé teszi a naplózás beállítását egy adott fájlra, például a syslog vagy az stderr fájlra. Megadhatja a bejelentkezni kívánt hibaüzenetek szintjét is.

access_log: Lehetővé teszi, hogy felhasználói kéréseket írjon az access.log fájlba

A HTTP szakaszban a következőket használhatja.

http {

access_log naplók / access.log kombinálva;
hiba_napló naplók / warn.log figyelmeztetés;

}

A DDOS megakadályozása

Az Nginxet a DDOS támadásoktól a következő módszerekkel védheti meg:

A felhasználói kérelmek korlátozása 

Használhatja a limit_req_zone és a limit_req irányelveket, hogy korlátozza a felhasználók által percekben küldött kérések arányát.

Adja hozzá a következő kódot a kiszolgáló szakaszba beágyazott helyrészhez.

limit_req_zone $ binary_remote_addr zone = egy: 10m sebesség = 30r / m;

szerver {
hely /admin.html {
limit_req zóna = egy;
}

}

Korlátozza a kapcsolatok számát 

Használhatja a limit_conn és limit_conn_zone irányelveket, hogy bizonyos helyekre vagy területekre korlátozza a kapcsolatot. Például az alábbi kód 15 kapcsolatot kap az ügyfelektől egy adott időszakra.

A következő kód a helyrészre megy.

limit_conn_zone $ binary_remote_addr zone = addr: 10m;

szerver {

hely / termékek / {
limit_conn addr 10;

}
}

Szüntesse meg a lassú kapcsolatokat   

Használhat olyan időtúllépési irányelveket, mint a kliens_test_túllépés és az ügyfél_header_idő. Ideje annak meghatározására, hogy az Nginx meddig várjon az ügyfelek törzséből és az ügyfél fejlécéből származó írásokra..

Adja hozzá a következőt a szerver szakaszban.

szerver {
client_body_timeout 5s;
client_header_timeout 5s;
}

Ugyancsak jó lenne a DDoS támadásokat a szélén megállítani felhőalapú megoldások kiaknázásával, amint itt említettem.

Letiltja a könyvtár felsorolását

Használhatja az auto_index irányelvet, hogy megakadályozza a könyvtárak felsorolását, az alábbi kód szerint. A könyvtár felsorolásának letiltásához állítsa azt off értékre.

hely / {
auto_index ki;
}

Következtetés

Az Nginx webszervert úgy állítottuk be, hogy hatékonyan működjön és megóvja azt a termelési környezetben jelentkező túlzott visszaélésekkel szemben. Ha Nginxet használ Internet-felületű webalkalmazásokhoz, akkor a jobb teljesítmény és biztonság érdekében fontolóra kell vennie egy CDN és felhőalapú biztonságot is..

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me