Apache 1

Ez a tartalom a sorozat része:

Vigyázz az új cikkekre ebben a sorozatban.

Gyakran előfordul, amely magában foglalja, egyrészt - a felhasználó a böngésző, a másik - egy távoli webszerver, az alábbi események: a felhasználó rákattint a böngésző a link egy kérést küld egy web szerver, ami azt kivonja az adott dokumentumot, és a dokumentum tartalmát visszaadja a távoli ügyfélnek.

1. Apache 1.x felépítése

Az ügyfélkérés több lépést tesz az Apache-ban:

Minden fázist saját Apache modul vezérel.

Apache 1

Apache 1

Minden egyes kérés esetén az Apache kernel létrehoz egy request_rec struktúraobjektumot, amelyet ezután átmegy a megfelelő modulra, és egy módosított verzióban fogadja.

Az alábbi ábrán részletesebben bemutatjuk az Apache architektúrát. Kis funkcionális modulok - ap, regex, amelyeket mind a kernel, mind az alapmodulok használnak. Egy különálló operációs modul hajtja végre az Apache több platformot.

Apache 1

Apache 1

A forrásfa közelebbi vizsgálatakor világossá válik:

  1. Az összes fejléc a beillesztési könyvtárba van csoportosítva.
  2. A rendszermag a fő könyvtárban van (libmain.a).
  3. Az alapmodulok a modulkönyvtárban találhatók (libstandard.a).
  4. A cross-platform megvalósítása az os könyvtárban található, amely magában foglalja a megfelelő alkönyvtárakat, mindegyiknek saját os.h. (Libos.a).
  5. A szabályos kifejezésekkel való munkához egy külön könyvtárkomponens van a regex könyvtárban (libregex.a).
  6. Egy különálló komponens az ap könyvtárban található, és számos funkciót (libap.a) tartalmaz.
  7. Külön alkatrész fekszik a support könyvtárat és parancsfájlokat és kódot Apache támogatási programok, mint a forgása naplófájlok, a manipuláció a jelszó fájlok, stb
  8. A segédkönyvtár tartalmazza az Apache fordításakor használt szkripteket.

Szinte az összes funkciónak van ap_ előtagja, ezt az 1.3 verzióban vezették be, hogy elkerüljék a névkonfliktust az 1.2-es verzióról való váltáskor.

2. Apache fő architektúra 1

A rendszermag kód a főkönyvtárban található. A rendszermagot úgy fejlesztették ki, hogy figyelembe véve, hogy bárki, aki az Apache funkcionalitását kívánja kiterjeszteni, ha lehetséges, nem érintette meg a rendszermag kódját, amely már tartalmaz minden ilyen kiterjesztési lehetőséget. A módosítható kernel egyetlen belső összetevője a HTTP protokoll végrehajtása.

Apache 1

Apache 1

3. Apache modulok

A modulok végrehajtják az Apache funkcionalitását. A modulok közvetlenül kommunikálhatnak a rendszermaggal, de nem tudnak közvetlenül kommunikálni egymással. Minden modul valójában egy HTTP-kérelem különböző fázisainak kezelője. Az alábbi ábra részletes áttekintést ad a modul felépítéséről. Egy modul a rendszermag által hívott kezelői függvények gyűjteménye. Mindegyik modulnak saját szerkezete van, amelyet modulnak neveznek, és amely a mutatókat a kezelők számára tárolja, és minden modul átmásolja a struktúra objektumát a rendszermagba.

Apache 1

Apache 1

Minden egyes modult a kernelnek inicializálnia kell. Elméletileg bármely modul használhatja a felhasználó által a konfigurációs fájlban előírt parancsokat. A rendszermag elolvassa a fájlt, majd a modulstruktúrában kapott modul parancssorából leképezi őket. A táblázat minden sorából egy pár áll: a tartalom típusa egy mutató a kezelőhöz, ahol a tartalom típusa a MIME típus.

Az ügyfelek közvetlen adatküldéssel foglalkozó kezelőit tartalomkezelőnek vagy válaszkezelőnek nevezik. Minden objektumnak van saját kezelője.

Az Apache-ban az összes modul a modulok könyvtárába van csoportosítva. A szabványos modulok a szabványos alkönyvtárba vannak csoportosítva. a proxy végrehajtása a proxy könyvtárban található. A példák könyvtárában csak egy kezelővel rendelkező demómodul található.

Minden szabványos modul statikusan van betöltve, bár dinamikus betöltés lehetséges: ezek a rendszermaghoz kapcsolódnak, és így tovább. Amikor Apache telepítve van, a konfiguráció elindításakor létrejön egy olyan modul, ami a modules.c nevű fájlból áll, amely 2 mutatócsoportot definiál moduláris struktúrákhoz:

Ebben az esetben az összes felsorolt ​​modul a következő csoportokra osztható:

4. Párhuzamosság

Az indításkor az Apache létrehozza (villa) az öt fő folyamat alapértelmezését, ez a minimális számú folyamat. Mindegyik folyamat támogathatja legalább 50 szálat (szál - ha az operációs rendszer támogatja a multithreadelést). Minden ügyfelkéréshez egy folyamatot osztunk meg. Van egy speciális struktúra - eredménytábla - amely minden folyamat állapotát tárolja. A több egyidejű lehetséges alapértelmezett folyamatok - 5 és 10 maximális számát az ilyen eljárások - 256. Van is egy különleges hely várja kéréseket, ami nincs helye a eredményjelző. Az ilyen sorok maximális hossza 511.

A párhuzamos ügyfélkapcsolatok maximális száma 100.

5. Adatszerkezetek

Az alábbi ábra a kliens kérés különböző fázisainak időzítési diagramját mutatja, míg a fő munkát a kernelben, a http_request.c fájlban végezzük.

Apache 1

Apache 1

Amikor egy kezelőt hívunk meg, minden modul ugyanazt a nyilvános struktúrát, request_rec paramétert kapja paraméterként. Ebben az esetben a struktúra különböző területeinek állapota megváltozhat. A válaszkezelők visszaadják a tartalmat az ügyfélnek. A kezelő egy másik al-lekérdezést is végrehajthat. A request_rec struktúra tartalmazhat egy mutatót egy másik request_rec struktúrára abban az esetben, ha egy átirányítás történik, és egy al-lekérdezés esetén a mutató önmagára mutathat. Az átirányítás azt jelenti, hogy egy képkezelőt hív fel egy dokumentumban vagy egy CGI-parancsfájlt hív. Ez felhívja az ap_internal_redirect kezelőt, amely egy új request_rec objektumot hoz létre. Egy ilyen objektum elhelyezhető a lekérdezett listában request_recs.

A request_rec struktúra a következő mezőket tartalmazza:

  • mutatók más request_rec;
  • mutató az erőforrás-poolhoz;
  • objektumok kérése:
    • URI
    • fájlnév
    • útvonal
  • információk a tartalomról:
    • tartalomtípus
    • kódolás
  • MIME fejlécek;
  • kérjen információkat:
    • protokoll
    • módszer

A következő a minta reprezentációja a request_rec struktúrában a leggyakrabban használt mezőkkel:

Az Apache erőforráscsoportot használ - pool - olyan adatszerkezet, amely tárolja a lekérdezés összes hozzárendelt forrásának listáját. Amikor a kérés feldolgozása befejeződik, a kérelemre felhasznált valamennyi erőforrás felszabadul. A modulok a saját igényeiknek megfelelő saját medencékkel rendelkezhetnek.

Amint már említettük, a kernel tárolja a konfigurációs parancsok tábláját. Minden modulnak is lehet saját parancssora. Minden parancs a command_struct struktúra objektumát tartalmazza, és a következőket tartalmazza:

  • a csapat neve;
  • mutató a kezelő funkcióhoz;
  • az érv elhaladt;
  • inicializálási feltételek;
  • típusa és száma;
  • az érvek leírása;

Az eredménytábla szerkezete megőrzi a feldolgozott kérelmek listáját. A kérés állapotát és idét tárolja. Minden egyes új folyamat esetében egy rekord kerül hozzáadásra az eredménytáblához, amelyet a kérelem feldolgozása után töröltek. A folyamat státusát ebben a struktúrában a folyamat maga módosítja. A kérés állapota a következő értékeket érheti el:

6. A válaszkezelő

A legtöbb kezelő eredménye a kérés_rec struktúra mezők értékének banális változására vagy a speciális kódok visszaadására korlátozódik. Ugyanaz a kezelő valós adatokat küld az ügyfélnek. Kezdetben az ügyfél HTTP fejlécet küld a send_http_header függvény használatával. Ha a kérelemnek címke van header_only, akkor az ügyfél nem küld többet. Ellenkező esetben az ügyfél elküldi az üzenetet, erre a célra speciális primitíveket használnak rputc, rprintf, send_fd. A következő kód a GET kérelem feldolgozását és az adatoknak az ügyfél részére történő elküldését mutatja:

Ez a függvény egy hibakódot vagy egy OK-t ad vissza, a második esetben az átirányítást egy másik kezelőnek nevezik a belső_redirect használatával.

A medence segítségével megoldott fő probléma a memória szivárgás megelőzése.

Az Apache medencét úgy tervezték meg, hogy minden erőforrás - memória, leírók stb. - automatikusan megtörténik az ügyfél kérésének feldolgozása után. Mindegyik ilyen kérést a pool-struktúra által képviselt saját medencét osztják el. A feldolgozás után ez a pool törlődik.

Az Apache indításakor egy speciális készlet van kiválasztva - a konfigurációs pool. A kiszolgáló újraindításakor ez a pool is törlődik.

A memóriát a palloc segítségével osztjuk meg, amely gyorsabb, mint a malloc. Ez a funkció 2 argumentummal rendelkezik - mutató a medencéhez és az elosztott memória összege:

A pfree funkció nincs jelen, mivel a memória automatikusan felszabadul, amikor a medence felszabadul. Vannak speciális alkalmazásfunkciók, amelyek felosztják a memóriát. Például a következő példában a pstrcat függvény 8 bájtos karakterlánc modulra osztja a memóriát:

Hasonlóképpen megnyitják a fájlokat is:

A memóriával való munkától eltérően a megfelelő záró funkció a pfclose.

A memóriaelosztási modell közös hátránya a beágyazott medencék. Olyan helyzetet szimulálhat, amelyben a szülői medence a gyermekmedence előtt felszabadul, és ez utóbbi esetben memóriazavar keletkezhet. Például egy magasan fészkelő szerverkatalógus-listát említhet. Ebben az esetben a make_sub_pool használatához almintákat kell létrehoznia.

A medence bármikor szabadítható fel clear_pool vagy destroy_pool segítségével.

Subqueries esetén a destroy_sub_request a memória biztonságos leállítására szolgál.

8. Konfiguráció

Az első Apache-ot azzal a céllal fejlesztették ki, hogy maximális kompatibilitást biztosítson az elődjével - az NCSA 1.3 webszerverrel - a konfigurációs fájlok olvasása szempontjából. A feladat az volt, hogy a funkcionalitást a kerneltől a modulokig kihasználja. Ehhez egy speciális parancssort hoztak létre a rendszermagban. A fájl típusának definíciói az utótagdal az AddType és az DefaultType konfigurációs irányelvek alapján készülnek.

A fájlrendszerrel való együttműködés az Aliases and Redirect direktívákkal történik.

A beágyazott konfigurációs fájlokkal végzett munka a .htaccess fájlok alapján történik.

Amikor a szerver egy direktívet olvas a fájlban , létrehoz egy mime_dir_config struktúrát:

Az AddType és AddEncoding parancsok általában a .htaccess fájlban vannak jelen.

Egy ilyen struktúra létrehozásához két paraméterre van szükség: a pool és a könyvtár neve:

Ha az általunk olvasott kiszolgálói könyvtárban van egy alkönyvtár, és létezik saját .htaccess, akkor két struktúrát kell összeállítanunk:

következtetés

Építészet első Apache a funkciók - minden funkció ap_ prefix végrehajtása cross-platform alapján készült az egyes modulok, a modulok nem tudnak kommunikálni egymással, de csak a mag, az összes modul lehet osztani a hét fő csoport: Broadcast, hitelesítés, MIME, fix -ups, tartalom generátorok, naplózás, proxy. A memóriakezelést poolok alapján hajtják végre. A rendszerkonfigurációnak számos lehetősége van a kiszolgáló elő konfigurálására.

Források letöltése

Kapcsolódó témák

Kapcsolódó cikkek