وب سرور Apache از نظر معماری و کاربرد به چهارلایه زیر تقسیم شده است مطابق با شکل زیر:
operating system
اساس functionality در شکل فوق بهوسیله سیستمعامل در لایه زیرین تهیه میشود، برای apache سیستمعامل مربوطه ورژنهای گوناگون unix است؛ اما سیستمعامل دیگر نیز میتوانند پاسخ قرار گیرند، سیستمعاملهایی از قبیل macos.win32.os/۲ و حتی posix که سیستمعامل ماشینهای main frame است .
Apache kernel ,core module, kernel libravies
لایه ۲ که هسته اصلی و شامل کرنل و ماژولهای مربوط به آن و یک سری library استاندارد است، این لایه به همراه ماژولهای مربوطه در عمل Http Server یعنی مبادله اطلاعاتی میان Browser و Server مورداستفاده قرار میگیرد. این لایه همچنین دارای توابع API و کدهای قابلاستفاده مجدد (REUSABLE) برای لایههای بالایی است.
Apache Modules
این لایه در واقع لایهای است که Apache Web server را در میان وب سرورهای دیگر متمایز کرده است و در واقع در این لایه قسمت User-visible Functionality شگفتانگیز و تحسینبرانگیز است و ماژولهای موجود آنقدر دارای Functionality بالا هستند که برای سرویس دادن استفاده میشود و این نشاندهنده مستقل بودن و وابسته نبودن ماژولها نسبت به یکدیگر است.
در واقع ماژولهایی که مورداستفاده وب سرورهای دیگر است. وب سرورهای دیگر بدون دسترسی به لایه ۱ و ۲ میتوانند مستقیم از ماژولهای لایه ۳ و ۴ استفاده کنند.
Third-party libraries
در لایه ۳ ممکن است بعضی از ماژولها بهتنهایی کارایی نداشته باشند و برای بهکاربردن آنها نیاز به libraryهای خارجی است مانند mod-perl و mod-ssl، مثلاً برای استفاده از mod-perl به یک سری library های زبان perl نیاز داریم. ازآنجاکه لایههای ۴ و ۳ و ماژولهای مربوطه مستقل از لایه ۲ هستند و بهصورت loosely coupled با لایه ۲ هستند و در واقع ارتباط استاتیکی با لایه ۲ ندارند و در حقیقت ارتباط آنها با این لایه بهصورت پویا یا dynamic است و این ارتباط بهوسیله Dynamic Shared Object فراهم میشود.
این ویژگی و ساختار دارای انعطافپذیری بالا است، یک نمونه انعطافپذیری این است که بهجای اینکه این ارتباط (ارتباط بین ۴ و ۳ با ۲) در موقع نصبکردن آپاچی بهصورت استاتیکی برقرار شود، این ارتباط در واقع STARTUPTIME لایهای ۴ و ۳ برقرار میشود؛ یعنی هر موقع لایه ۳ میخواهند با لایه ۲ ارتباط برقرار کنند همان موقع پیوند توسط DSO برقرار میشود؛ لذا پیوند دائمی و ایستا نیست. در واقع DSO یکی از ویژگیهای متمایز آپاچی نسبت به سایر وب سرورها میباشد.
Apache kernel functionality
هسته آپاچی که در لایه ۲ واقع است دارای دو هدف است:
- تهیه Basic HTTP server functionality (برای مبادله اطلاعاتی بین سرور و مرورگر)
- تهیه ماژولهای API و توابع موردنیاز
کرنل در قسمت ۱ وظایف زیر را انجام میدهد:
۱- یک سری وظایف سیستم عاملی از قبیل:
- الف – Memory Segment و… که در واقع Resource Handling میشود.
- ب – نگهداری Pre-Forked Process Model
۲- سرکشی بهSocket هایTCP/IP
۳- کنترل ورود HTTP Request بهوسیله پروسسهای مربوطه
۴- مدیریت HTTP Protocol بهمنظور رسیدگی به در خواست HTTP Request
5- تهیه Read/Write Buffer
و همچنین توابع اضافی مثل url، mime ,header passing و dsoloading.
توضیحات مربوط به ماژولهای به وب سرور Apache
۱– Core – Modules
http-core
یک ماژول پایه برای وب سرور Apache است که کارایی هسته آپاچی از این ماژول نشئت میگیرد این ماژول بهعنوان یک ماژول API نیز به کار برده میشود.
ولی سه ویژگی مهم دارد :
الف) همانند ماژولهای دیگر نامش از کلمه mod-xxx شروع نمیشود؛ بلکه همانطور که مشاهده میشود از http-xxx شروع شده است.
ب) درست است که بهعنوان یک ماژول API کاربرد دارد؛ اما هیچ اتصال API به لایه سوم ندارد و همه لینکهای این ماژول در لایه ۲ یعنی در هسته آپاچی است و لینک و اتصالی به بیرون از هسته ندارد.
پ) این ماژول یک ماژول اجباری است و هرگز از روی سیستم پاک نمیشود. این ماژول در مسیر مشخص (SN/MAIN / http -core c) واقع است و بهصورت پیشفرض فعال است.
mod –so
این ماژول در لایه دوم واقع است و در واقع جزو Core Modulesها است این ماژول اشیای DSO را تولید میکند و همانطور که قبلاً داده شده است این اشیا برای پیوند بین لایه سوم و دوم مورداستفاده قرار میگیرد در واقع این ماژول نقش حیاتی برای ماژولهای این دولایه دارد این ماژول در حالت عادی غیرفعال است این ماژول در مسیر SRC/MODULES/STANDARD/MOD –SO.C واقع است.
۲– URL Mapping –ماژولهای مربوط به URL
mod – alias
ماژول mod -alias در روزهای اولی که apache به وجود آمد برای Translation و Redirection یک URL مورداستفاده قرار میگرفت، این روش محدودیتهایی داشت؛ اما فهمیدن مکانیسم این ماژول ساده بود.
این روش بهوسیله MAPPING کردن URL به Directory path عمل Translation انجام میشود و پس از ترجمه عمل Redirection انجام میشود.
این ماژول در .src/modules /standards/mod-alias .c قرار گرفته و در حالت عادی غیرفعال است.
mod-rewrite
این ماژول هم روش دیگری برای Translation و Redirection(ترجمه و مسیریابی) URL است؛ ولی این روش در ورژنهای بعدی Apache به کار گرفته شد.
در این روش از الگوریتم پیچیدهتری استفاده شده است و در واقع این ماژول هم یکی از وجوه تمایز Apache نسبت به سایر وب سرورها است و جزء نقاط قوت آن میباشد.
این ماژول در src/modules/standards/mod-rewrite.c قرار دارد و در حالت عادی غیرفعال است.
mod-speling
این ماژول برای تصحیح و کاهش خطا در URL مورداستفاده قرار میگیرد در واقع اگر در نام URL درخواستی، ازقلمافتادگی، اشتباه و یا غیره اتفاق افتد این ماژول سعی میکنند بعد از اینکه ماژولهای rewrite و alias نتوانستند URL مربوطه را شناسایی کنند که با وجود اشتباه حتی اگر میزان اشتباه زیاد باشد،
منبع درخواستی موجود درURL را بهوسیله مقایسه پیدا میکند، البته اغلب این راهحل بهتر است که به USER اطلاع دهیم که در URL موردنظر اشتباه وجود دارد ولی Apache با انعطافپذیری بالا این کار نیز از عهده کاربر خارج میسازد و این هم یکی از وجوه تمایز Apache است.
این ماژول در مسیر src/modules/standards/mod-speging.c قرار دارد و در حالت عادی غیرفعال است.
ماژولهای دیگری نیز مانند Mod-imap وmod-dir در بخش URL Mapping وجود دارند.
۳– ماژولهای Access Control
این بخش تنها یک ماژول دارد که mod-access است.
۴– User-Authentication
در واقع در این قسمت از کدهای خاص برای اطمینان از اینکه پیغام و در خواست رسیده صحیح است یا صحیح به دست گیرنده پیام رسیده است یا نه استفاده میشود.
ماژولهای مربوطه :
mod -AUTH
mod -AUTH-ANON
mod –DIQEST
5- Content Selection
در این قسمت ماژولهای زیر قرار میگیرند:
mod -DIR
mod -AETIONS
mod – NEQOTIOTION
6- Environment creation
ماژولهای مربوطه به این قسمت عبارتاند از :
mod-env
mod-setenvif
mod- unique –id
7- Server-Side Scripting
ماژولهای مربوط به این قسمت عبارتاند از :
mod-cgi
mod-inclde
8- Response Header Generation
ماژولهای مربوط به این قسمت عبارتاند از :
mod -MIME
mod -MIME-MAGIC
mod -EXPIRES
mod -HEADERS
mod -CERN- META
9- Internal Content Handlers
ماژولهای مربوط به این قسمت عبارتاند از :
mod -asis
mod -autondex
mod -staus
mod –info
10- Request Logging
ماژولهای مربوط به این قسمت عبارتاند از :
mod -Log-config
mod -log-agent
mod -log-referer
mod –usertack
11- Experimental
ماژولهای مربوط به این قسمت عبارتاند از :
mod -mmap-static
mod –example
12- Extensional Functionality
ماژولهای مربوط به این قسمت عبارتاند از :
mod -proxy
ماژولهای شماره ۳ تا 12 فقط در حد نامبردن در مقاله عنوان شد و به دلیل ازدیاد ماژولهای Apache، فقط نام قسمتها و ماژولهای مربوط به هر قسمت ذکر شده است.
در اینجا به توضیح دو ماژول میپردازیم که برای استفاده از آنها احتیاج به لایه چهارم داریم؛ یعنی یک سری Libraries و توابع خارجی که این ماژولها باید با آنها ارتباط برقرار کنند تا قابلاستفاده شوند.
Mod -PERL
این ماژول امکانات برای برقراری با زبان PERL و LIBRARIESهای مربوط به این را فراهم میکند این ماژول در حالت عادی غیرفعال است و در مسیر (SRC/modules/perl/mod-perl.c) قرار دارد.
Mod -SSL
این ماژول یک الگوریتم رمزنگاری از طریق پروتکلهای SSL (Secure Socket Layer) و پروتکل TLS (Transport Layer Security) و با کمک SSL/TLS یعنی ترکیب دو پروتکل فوق تهیه میکند.
SSL/TLS یک پروتکل رمزنگاری عمومی است و در وب سرور یک پروتکل HTTPS میسازد؛ یعنی یک پروتکل HTTP که قابل رمزنگاری با SSL/TLS باشد برای وب سرور میسازد. این ماژول در مسیر (src.modules/ssl/mod-ssl.c) قرار دارد و در حالت عادی غیرفعال است.