وب سرور آپاچی (Apache)

وب سرور آپاچی (Apache)
در این پست می‌خوانید:

وب سرور آپاچی (Apache) چیست؟

وب سرور آپاچی (Apache) گسترده ترین و محبوب ترین سرور HTTP در دسترس بر روی اینترنت می باشد که از زبان های PHP و Perl پشتیبانی می کند و روی بیشتر سیستم عامل های قابل اجرا است یک برنامه free Open Source است که با سرور های وب برای اداره کردن درخواستها و تقاضاهای وب و منابع به کار می رود .
Apache HTTP Server روی سیستم عامل Unix مانند Linux یا BSD اجرا می شود همچنین می تواند روی Windows مایکروسافت و دیگر سیستم عامل ها یا Platform ها اجرا شود . یک سرور با خصوصیات منحصر به فرد با add-on های قدرتمند که به صورت مجانی در دسترس هستند .
Apache دارای امکانات ویژه می باشد که متداول ترین استفاده از ویژگی های این برنامه .htaccess است که طراحان حرفه ای در محیط لینوکس از آن بهره می گیرند .

برای نمونه زمانی که بخواهند اولین صفحه در سایت بخصوصی باشد با یک دستور در آن پرونده این امر ممکن می گردد و یا زمانی که صاحب سایت مایل نیست که فایلهای موجود در سرور وی توسط دیگران دزدیده شود و بخواهد که مانع از پیوند مستقیم آنها شود Apache کمک می کند تا به خواستشان برسند . زمانی که برنامه نویس بخواهد که محل واقعی صفحات دیده نشود نیز این برنامه مورد استفاده قرار می گیرد .

تاریخچه وب سرور Apache

Apache Web Server بیشترین استفاده را روی اینترنت دارد بیشتر از 50 درصد از وب سایتهای موجود از Apache استفاده میکنند. این محصول توسط گروهی عرضه می شود که به Apache Group موسوم اند و این گروه پروژه Apache Http Server Project را اداره می کنند این گروه سخت درکارند تا با ارائه محصولاتی با Configuration بالا وانعطاف پذیری خوب عرضه نمایند.
اولین ورژن Apache درApril سال 1995 که ورژن 0.6.2 است خارج شد و آخرین ورژن موجود 2.4.23 است. تا قبل از آپاچی یک وب سرور وجود داشت بنام NCSA Httpd 1.3 که در واقع اولین ورژن آپاچی از این وب سرو نشات گرفته است و در واقع پایه و اساس آپاچی بود ولی آپاچی به سرعت رشد کرد ودرmay-june سال 1995 گروه آپاچی ورژن 0.7 را تولید کردند اما بعد از مدتی گروه اپاچی متوجه شد که این وب سرور نیاز به معماری جدید دارد و با یک معماری جدید محصول بعدی وارد بازار شد درسال 1995 (Auguest) این محصول ورژن 0.8.8 آپاچی بود.
ورژن جدید با معماری جدید شامل ساختارهای ماژولار و همچنین بسط توابع API وهمچنین یک سری خصوصیات سیستم عامل از قبیل POOL-based memory allocatcon و new forking process model بود و این معماری جدید گسترش یافت تا به آخرین ورژن ان یعنی 2.4.23 رسید، البته با ورود این وب سرور جدید وب سرور قدیمی Ncsa http4 بازنشسته شد و این نسل جدید شروع به کار کرد.

معماری و کارایی وب سرور Apache

بسته نرم افزاریApache از نظر معماری وکاربرد به چهارلایه زیر تقسیم شده است مطابق با شکل زیر:

 معماری و کارایی وب سرور Apache

معماری و کارایی وب سرور Apache

operating system

اساس functionolity درشکل فوق به وسیله سیستم عامل در لایه زیرین تهیه می شود، برای apache سیستم عامل مربوطه ورژن های گوناگون unix است اما سیستم عامل دیگر نیز می توانند پاسخ قرار گیرند، سیستم عامل هایی از قبیل macos.win32.os/2 وحتی posix که سیستم عامل ماشین های main frame است .

Apache kernel ,core module, kernel libravies

لایه 2 که هسته اصلی و شامل کرنل و ماژول های مربوط به آن و یک سری librariey استاندارد است، این لایه به همراه ماژول های مربوطه در عمل Http Server یعنی مبادله اطلاعاتی میان Browser و Server مورد استفاده قرار می گیرد. این لایه همچنین دارای توابع API و کدهای قابل استفاده مجدد (REUSABLE) برای لایه های بالایی است.

Apache Modules

این لایه در واقع لایه ای است که Apache Webserver را در میان وب سرورهای دیگر متمایز کرده است و در واقع در این لایه قسمت User-visible Functionality شگفت انگیز و تحسین بر انگیز است و ماژول های موجود آنقدر دارای Functionlity بالاهستند که برای سرویس دادن استفاده میشود و این نشان دهنده مستقل بودن و وابسته نبودن ماژولها نسبت به یکدیگر است.
در واقع ماژول هایی که مورد استفاده وب سرورهای دیگر است. وب سرورهای دیگر بدون دسترسی به لایه 1 و 2 می توانند مستقیم از ماژول های لایه 3 و 4 استفاده کنند.

Third-party libraries

در لایه 3 ممکن است بعضی از ماژول ها به تنهایی کارآیی نداشته باشند و برای به کار بردن آنها نیاز به library های خارجی است مانند mod-perl و mod-ssl، مثلا برای استفاده از mod-perl به یک سری library های زبان perl نیاز داریم. از آنجاکه لایه های 4 و 3 و ماژول های مربوطه مستقل از لایه 2 هستند و به صورت loosely coupled با لایه 2 هستند و در واقع ارتباط استاتیکی با لایه 2 ندارند و در حقیقت ارتباط آنها با این لایه به صورت پویا یا dynamic است و این ارتباط به وسیله Dynamic Shared Objectفراهم می شود.

این ویژگی و ساختار دارای انعطاف پذیری بالا است، یک نمونه انعطاف پذیری این است که بجای اینکه این ارتباط (ارتباط بین 4و3 با 2) در موقع نصب کردن آپاچی به صورت استاتیکی بر قرار شود، این ارتباط در واقع STARTUPTIME لایه ای 4 و 3 برقرار می شود یعنی هر موقع لایه 3 می خواهند با لایه 2 ارتباط برقرار کنند همان موقع پیوند توسط DSO برقرار می شود لذا پیوند دائمی و ایستا نیست. در واقع DSO یکی از ویژگی های متمایز آپاچی نسبت به سایر وب سرورها می باشد.

Apache kernel functionlity

هسته آپاچی که در لایه 2 واقع است دارای دو هدف است:

    • تهیه Basic HTTP server functionality (برای مبادله اطلاعاتی بین سرور و مرورگر)
    •  تهیه ماژول های API و توابع مورد نیاز

 

کرنل در قسمت 1 وظایف زیر را انجام میدهد:

1- یک سری وظایف سیستم عاملی از قبیل:

    • الف – Memory Segment و… که در واقع Resource Handling می شود.
    • ب – نگهداری Pre-Forked Process Model

2- سرکشی بهSocket هایTCP/IP
3- کنترل ورود HTTP Request به وسیله پروسس های مربوطه
4- مدیریت HTTP Protocol به منظور رسیدگی به در خواست HTTP Request
5- تهیه Read/Write Buffer
و همچنین توابع اضافی مثل url، mime ,header passing و dsoloading.

 

توضیحات مربوط به ماژول های به وب سرور Apache

1- Core – Modules

http-core
یک ماژول پایه برای وب سرور Apache است که کارآیی هسته آپاچی از این ماژول نشات می گیرد این ماژول به عنوان یک ماژول API نیز به کار برده می شود.
ولی سه ویژگی مهم دارد :
الف) همانند ماژول های دیگر نامش از کلمه mod-xxx شروع نمیشود بلکه همانطور که مشاهده می شود از http-xxx شروع شده است.
ب) درست است که به عنوان یک ماژول API کاربرد دارد اما هیچ اتصال API به لایه سوم ندارد و همه لینک های این ماژول در لایه 2 یعنی در هسته آپاچی است و لینک و اتصالی به بیرون از هسته ندارد.
پ) این ماژول یک ماژول اجباری است و هرگز از روی سیستم پاک نمی شود. این ماژول در مسیر مشخص (SN/MAIN / http -core c) واقع است و به صورت پیش فرض فعال است.

mod –so
این ماژول در لایه دوم واقع است و در واقع جزو Core Modulesها است این ماژول اشیاء DSO را تولید می کند و همانطور که قبلا داده شده است این اشیاء برای پیوند بین لایه سوم و دوم مورد استفاده قرار می گیرد در واقع این ماژول نقش حیاتی برای ماژول های این دولایه دارد این ماژول درحالت عادی غیرفعال است این ماژول در مسیر SRC/MODULES/STANDARD/MOD –SO.C واقع است.

2- 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 وجود دارند.

3- ماژول های Access Control

این بخش تنها یک ماژول دارد که mod-access است.

4- 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
ماژول های شماره 3 تا 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) قرار دارد و در حالت عادی غیر فعال است.

 

 

 

ماژول هایی هستند که مورد استفاده لایه سوم هستند و در هسته آپاچی به وجود می آیند، البته این به آن معنا نیست که لایه سوم وابسته به این ماژول ها (ماژول های API) است. API شامل لیست توابعی هستند که در داخل ماژول های لایه سوم وجود دارد.
وقتی که هسته یک درخواست HTTP REQUEST دریافت می کند برای انتشار این درخواست بین ماژول های مختلف از API استفاده می کند چرا که API مشخص می کند که هر تابع مربوط به چه ماژولی است و هر ماژول چه توابعی دارد و هر درخواست پیغام به کدام ماژول باید برود البته API فقط لیست توابع موجود درماژول ها نیست بلکه دارای توابعی هست که به طور عمومی قابل استفاده ماژول های لایه سوم است. این توابع با (ap-xxx) شروع می شود هر HTTP REQUESTبه ده شاخه مجزا تقسیم می شود و هر ماژول اجرای یکی از شاخه ها را بر عهده می گیرد و در مواقع لازم نیز از توابع (ap-xxx) استفاده می کند.

دیدگاه‌ها ۰
ارسال دیدگاه جدید