وب سرور آپاچی: بخش اول آشنایی
در این سری مطالب قصد داریم شما را با وب سرور قدرتمند آپاچی و نحوه پیکربندی آن آشنا کنیم. با نوتیف همراه باشید.
آشنایی با کارساز وب آپاچی
کارساز وب آپاچی یا سرویس دهندهٔ اچتیتیپی آپاچی (Apache HTTP Server) که بیشتر آن را آپاچی مینامند، یک برنامهٔ کارساز وب رایگان و متن باز است که نقش کلیدی در توسعهٔ دنیای وب ایفا کرده و معتبرترین و پراستفاده ترین سرویس دهنده وب می باشد. این برنامه همچنین نقشی کلیدی در گسترش آغازین شبکه جهانی اینترنت داشتهاست.
آپاچی اولین وب سروری است که از مرز سرویس دهی به 100 میلیون وب سایت رد شده است. این کارساز وب در سال ۲۰۰۹ موفق به عبور از این رکورد شد. از این سرویس دهنده بهطور معمول در محیطهای بر پایه ی سیستم عامل های یونیکس و لینوکس استفاده میشود. اما برای طیف بسیار وسیعی از سیستم عامل ها از جملهٔ: یونیکس، گنو، فری بیاسدی، لینوکس،سولاریس، NovelNetware, آمیگااُاس، مکااساکس، ویندوز، OS/2 و eComStation قابل استفاده است..
آپاچی توسط بنیاد نرمافزار آزاد توسعه و پشتیبانی میشود و تحت حمایت بنیاد نرمافزاری آپاچی قرار دارد. این برنامه تحت مجور آپاچی بوده و بهصورت متنباز ارائه می شود؛ و از سال ۱۹۹۶ تاکنون پرکاربردترین برنامه در حوزهٔ خود است.
همکنون در اکتبر 2016 طبق آمار ارائه شده توسط وب سایت معتبر w3techs آپاچی با 51.6 درصد بیشترین سهم بازار سرویس دهنده های وب را بخود اختصاص داده است.
تاریخچه
رابرت مککول (Robert McCool) یکی از برنامه نویسان مرکز ملی کاربردهای ابررایانش آمریکا (National Center for Supercomputing Applications) که با اختصار NCSA نامیده می شود و یکی از ارگان های دانشگاه ایلینویز می باشد بود. وی هنگامی که دانشجوی دانشگاه ایلینویز (University of Illinois at Urbana–Champaign) بود طرح یک سرویس دهنده مبتنی بر وب را ارائه و نام آن را NCSA HTTPd نهاد و نسخه اولیه آن را با زبان C توسعه داد. بعدها در اوایل سال 1995 توسعه نسخه جدیدتر آن شروع و نام آپاچی برای آن انتخاب شد.
جالب است بدانید تا نسخه 2.2 آپاچی، فایل پیکربندی آن با نام httpd.conf با توضیحاتی با امضاء و نام راب مک کول منتشر می شد.
در ادامه روند توسعه آپاچی سرپرستی پروژه به بنیاد نرم افزاری تازه تاسیسی با همین نام سپرده شد و تاکنون این بنیاد متولی توسعه تمامی نرم افزارهای متن باز مبتنی بر آپاچی می باشد.
فلسفه نام آپاچی
حال چرا بین این همه نام، نام این وب سرور کاربردی و محبوب را آپاچی گذاشته اند؟؟؟ طبق آنچه که در بخش FAQ سایت پروژه آپاچی نگاشته شده است، این نام به احترام قبیله آمریکایی تبار Apache (آپاچی) و به احترام مهارت های قهرمانانه آنها در جنگاوری و استراتژی انتخاب شده است. پیش از این گمان بر آن بود که نام آپاچی جناسی از عبارت A Patchy Server است، چرا که آپاچی با توجه به ساختار مولفه ای آن مجموعه ای از مولفه های نرم افزاری (تکه ها: Patch) است اما با این حساب این گمانی غلط می باشد. مستندات رسمی نیز تعاریف بسیار زیادی از این نام ارائه داده اند اما Brian Behnlendorf، یکی از بنیان گزاران آپاچی در گزارش سال 2000 موضوع را صراحتاً اینگونه بیان می کند که:
این نام به معنای واقعی کلمه به صورت ناگهانی و غیرمنتظره ای انتخاب شد. ای کاش می توانستم بگویم که این موضوع یک واقعه فوق العاده بود اما واقعاً ناگهانی بود. من این نام را بر روی کاغذ نوشته بودم و ماه ها بعد زمانی که پروژه آغاز شد، من این صفحه را به مردم نشان دادم و گفتم: (نظرتون راجع به این چیه؟؟) و یکی گفت که آن ها این نام را دوست دارند و و واقعاً جناس جالبی است و من گفتم:(جناس؟ منظورت چیه؟) و او پاسخ داد که: (خوب، ما در حال ایجاد یک سرور با مجموعه ای از Patch های نرم افزاری هستیم، درسته؟ خوب پس اون A Patchy Web Server [معادل مفهومی: یک وب سرور بخش بخشی] است و من پاسخ دادم: (اوه، بسیار عالی…) … و زمانی که من خودم به این نام فکر کردم متوجه شدم که…
خصوصیات و ویژگیها
اساساً آپاچی از مجموعهای از مؤلفه های نرمافزاری یا اصطلاحاً patch (با تلفظ پچ) یا Module (با تلفظ ماژول) تشکیل شده است به گونهای که همانطور که گفته شد بسیاری از توسعه دهندگان برای تاکید این موضوع از اصطلاح “a patchy server ” با تلفظ “اپچی سرور” به معنی سروری که از مجموعهای از مؤلفههای نرمافزاری ایجاد شده است، استفاده میکردند.
مدتهاست که توسعه وب سرور Apache در قالب قطعات یا ماژولهای نرمافزاری مستقل صورت میگیرد. توسعه بر اساس این ماژولها (اصطلاحاً توسعه “ماژولار – Modular”) موجب شده که بهرهگیری از Apache به عنوان وب سرور سربار کمتری را به سختافزار و سیستم عامل میزبانی که بر روی آن مستقر شده است تحمیل کند.
اما طراحی ماژولار یعنی چه؟
این نوع طراحی امروزه در بسیاری از صنایع دیگر نیز قابل مشاهده است. به عنوان مثال هر یک از قطعات یک اتومبیل را می توان به عنوان یک ماژول یا مولفه در نظر گرفت. حال هر قطعه توسط یک کارخانه قطعه سازی تولید می شود و کارخانه سازنده اصلی با گردآوری این قطعات و مونتاژ آنها اتومبیل را تولید می کند. مفهومی مثل پازل و یا لوگو که شما با سرهم کردن قطعات مسئله را حل می کنید یا شیء جدیدی می سازید. بدیهی است که برخی قطعات ضروری بوده و باید در ساختار یک ماشین وجود داشته باشند اما برخی قطعات جنبه سفارشی داشته و اگر خریدار مایل باشد بر روی ماشین نصب می شود. مثلاً سقف سان روف یا رینگ اسپورت یا توربو شارژ و …
به بیان بهتر در استفاده از این وب سرور تنها ماژولهای مورد نیاز بر روی سختافزار و سیستم عامل میزبان مستقر میشوند و از استفاده از ماژول های غیر ضروری خودداری می شود. این ویژگی همچنین روند توسعه و پشتیبانی از ماژولهایی راکه شرکت و برنامهنویسان مستقل (اصطلاحاً third parties) به منظورهای مختلف توسعه میدهند، تسهیل میکند.
وب سرور Apache تقریباً تمامی تکنولوژی اینترنت را که در ارتباط با وب توسعه پیدا کردهاند به خوبی مورد پشتیبانی قرار میدهد. این قابلیت حتی شامل برخی تکنولوژیهای اختصاصی از جمله Microsoft Frontpage Extensions نیز میشود. وب سرور Apache تمام مشخصات پروتکل HTTP اسکریپتنویسی، احراز هویت و قابلیت استفاده از سایر تکنولوژیها را به خوبی مورد پشتیبانی قرار داده است.
توسعه مداوم و برخورداری از تیم توسعه قوی کلید موفقیت آپاچی
همانطور که گفته شد مسئولیت توسعه و رفع نواقص وب سرور Apache بر عهده بنیاد نرم افزار آپاچی (Apache Software Foundation) است. نکته شگفتانگیز در این رابطه این است که در صورت کشف آسیب پذیری و نقص در آپاچی تنها پس از گذشت چند روز اشکالات و شکافهای امنیتی یافت شده اصلاح میشود. نکته مذکور Apache را به پایدارترین و در عین حال ایمنترین وب سرور حال حاضر دنیا تبدیل کرده است. این ویژگی یکی از مهمترین دلایل مقبولیت آن است.
مزیت دیگری که به واسطه سرعت بالای توسعه و انتشار نسخههای جدید نرمافزار به دست میآید، مجموعهای ارزشمند از قابلیتهاست، که البته وب سرور Apache نیز از این قاعده مستثنی نیست. به این ترتیب تکنولوژی جدیدی که همه روزه در در ارتباط با شبکه جهانی اینترنت با آنها مواجه میشویم، پیش از هر وب سرور دیگری توسط Apache پیادهسازی شده و مورد پشتیبانی قرار میگیرند.
پشتیبانی کامل از CGI
CGI مخفف Common Gateway Interface است. CGI یک بخشی از وب سرور (Web Server) است که این قابلیت را فراهم میکند تا برنامه ای در سمت سرور اجرا شود و خروجی آن برنامه برای کاربر متصل شده به سرور از طریق صفحه ی وب به نمایش در آید. CGI یکی از اولین روش ها برای تولید صفحات وب پویا (Dynamic) به حساب میآید که دارای قدمت زیادی ست.
به عنوان مثال در موتور های جستجو کاربر تنها یک صفحه در مقابل خود میبیند که شامل یک کادر برای وارد کردن کلید واژه و یک دکمهی جستجو ست. وقتی کاربر دکمه ی جستجو را میزند، CGI یک اسکریپت را (فرضا” به زبان Perl) که در پوشهی خاصی (cgi_bin) روی سرور قرار گرفته اجرا می کند. با اجرای این اسکریپت کلید واژه ی کاربر به عنوان ورودی استخراج شده و در پایگاه دادهای این کلید واژه جست و جو میشود تا نتایج جست و جو به دست آید. در نهایت نتایج جستجو خروجی اسکریپت در قالب یک فایل HTML تولید شده و CGI این فایل HTML را به عنوان پاسخ برای کاربر ارسال میکند. چون پویش در یک پایگاه داده به طور مستقیم از راه HTML ممکن نیست، مجبور شدیم از کد Perl برای این کار کمک بگیریم و CGI در این بین نقش یک واسطه را بازی میکند.
ارائه محتوا بصورت هوشمند با قابلیت Content Negotiation
قابلیت content negotiation امکان ارایهٔ چند محتوای متفاوت برای یک آدرس وب را فراهم می آورد. با استفاده از این قابلیت می توان بنا به شرایط مرورگر درخواست دهنده محتوای مناسب آن را ارائه کرد. مثلاً در زمانی که IE4 از فرمت PNG پشتیبانی نمیکند و به جای آن شما نسخهٔ GIF را برای مرورگر ارسال میکنید. یا مثلاً بر اساس UserAgent برای کاربرانی که از مرورگر دستگاه موبایل خود صفحه وبی را درخواست داده اند، نسخهٔ موبایل آن صفحه را برای مرورگر ارسال میکنید.
دیگر مزیت های و ویژگی های مهم وب سرور آپاچی عبارتند از:
- Apache رایگان و متن باز است و کد منبع آن به رایگان در دسترس عموم است.
- Apache بر روی مجموعهای بسیار متنوعی از سیستمهای عامل قابل استفاده است.
- Apache با بهرمند بودن از تیم توسعه بزرگ و ماهر، دائماً در حال توسعه و افزایش قابلیتهای جدید است.
- Apache بسیار توانمند بوده و به واسطه طراحی ماجولار به راحتی قابل توسعه است.
- پشتیبانی از زبان های برنامه نویسی و اسکریپت نویسی متنوعی نظیر: perl, python, TCL و PHP
- Apache از قابلیت URL rewiter یا بازنویسی URL پشتیبانی می کند.
- پشتیبانی از استاندارد آدرس دهی نوین IPv6
- پشتیبانی از ثبت وقایع در فایل به صورت اختصاصی.
- امکان مشاهده و تحلیل وقایع ثبت شدهٔ آپاچی توسط اسکریپتهای رایگاه همچون AWStats, W3Perl یا Visitors نمایش نتایج در مرورگر
- پشتیبانی از روشهای فشردهسازی معمول و عمومی و نیز قابل توسعه همچون mod_gzip که برای کاهش حجم صفحات وب که در اینترنت تبادل پیدا میکنند استفاده میشود.
- بهرهمندی از قابلیت VirtualHost که امکانی را فراهم میکند تا یک نسخه از آپاچی برای وب سایتهای متعددی مورد استفاده قرار گیرد.
- قابلیت تنظیم و اختصاصی نمودن انواع پیامهای خطا.
- تصدیق هویت براساس بانک اطلاعاتی.
- بهرهمندی از چندین رابط گرافیکی متنوع و متفاوت.
برخی از ماژول ها مهم که با اضافه شدن به آپاچی قابلیت های آن را توسعه می دهند:
- ماژولهای تصدیق هویت شامل: mod_access, mod_auth,… . پشتیبانی از SSL, TLS.
- ماژول modSecurity که یک برنامهٔ متنباز برای تشخیص و جلوگیری از نفوذ به برنامههای تحت وب است.
عملکرد و کارایی
اگر چه هدف طراحی آپاچی کاراییی بالا نبود ولی این برنامه با سرویسدهندگان پرسرعت وب قابل مقایسه است. و از تکنیک MultiProcess , MultiThreading پشتیبانی میکند.
یکی از کاربردیترین موارد مربوط به آپاچی برای برنامهنویسان استفاده از پرونده (فایل htaccess) است. برنامهنویس میتواند با اعمال تغییراتی در این پرونده که بر هر شاخهای قابل اضافه شدن است دستورهای ویژهٔ آن شاخه را به سرور ارایه دهد. برای نمونه اگر بخواهد که در صورت وارد کردن نشانی aa.html نام آن باقی بماند ولی در واقع پرونده main.php?page=bb اجرا شود بهوسیلهٔ این پرونده قادر به اعمال دستورش خواهد بود.
هنگامی که نرم افزار آپاجی در حال اجرا هست، پروسه آن معمولاً به نام httpd می باشد که نمایش مختصر HTTP Daemon می باشد.
رقبای مهم آپاچی
همانند هر نرم افزاری آپاچی نیز دارای رقبای متعددی است که با این وب سرور برای تصاحب سهم بیشتری از بازار وب سرورها در رقابت هستند. می توان از وب سرورهای NGINX و IIS مایکروسافت به عنوان مهمترین رقیبای آپاچی یاد کرد. همانطور که در ابتدای مطلب مشاهده کردید این دو وب سرور با کسب رتبه دوم و سوم سهم بازار در صدد تصاحب جایگاه اولی آپاچی هستند. از دیگر رقبای معروف آپاچی به سرویس دهنده وب LiteSpeed اشاره کرد که به سبکی و سرعت بالا مشهور است.
در بخش دوم با روش نصب وب سرور آپاچی اشنا خواهیم شد. همراه نوتیف باشید.