یکی از انواع وب سرور آپاچی است. براساس نظرسنجی انجام شده توسط سایت news.netcraft.com در ژوئن سال ۲۰۱۶، سرعت حیرت انگیز گسترش و محبوبیت وب سرور Apache منجر به کنار کشیدن مایکروسافت IIS از رقابت با این وب سرور و کاهش محبوبیت آن گردید. در این مقاله در مورد وب سرور آپاچی و نحوه ی بهینه کردن عملکرد آن می خوانید.
آپاچی چیست؟
apache چیست؟ پروژهی Apache HTTP Server یک پروژهی توسعه و مدیریت وب سرور اپن سورس ( در مقالات دیگر در مورد open source چیست توضیح داده ایم ) تحت نام آپاچی (Apache) است که برای سیستم عاملهای مدرن شامل لینوکس و ویندوز ارایه شده است. آپاچی از زبان های Perl و PHP پشتیبانی می کند.
هدف وب سرور آپاچی
هدف از این پروژه دست یابی به یک وب سرور امن، بهینه و قابل گسترش بوده که مطابق با استانداردهای روز HTTP عمل میکند. برای رسیدن به عملکرد بهتر در وب سرور آپاچی نیاز است که تغییراتی را در فایل تنظیمات آن (httpd.conf) که در مسیر apache_dir/conf است اعمال گردد.
وبسرور آپاچی علی رغم اینکه نسخهی ویندوز سرور نیز دارد اما عموما در هاست لینوکس اشتراکی استفاده میشود.
حال که با وب سرور آپاچی و اهداف آن آشنا شدید در امتداد مقاله به بررسی بهینه سازی عملکرد آپاچی می پردازیم.
استفاده از وب سرور Apache در نسخههای RHEL و CentOS
در نسخههای Red Hat Enterprise Linux 7 و CentOS 7 از توزیع لینوکس، گروهی از پکیجها تحت عنوان Web Server وجود دارد. این پکیجها شامل موارد زیر است:
- httpd
- httpd-tools
- httpd-manual
- crypto-utils
- mod_fcgid
- mod_ssl
- perl-Newt
اگر از Apache برای توسعه سرور یا مدیریت لینوکس خود استفاده میکنید، باید به این نکته توجه داشته باشید که چگونگی تنظیم و پیکربندی وب سرور آپاچی بسیار مهم و حائز اهمیت خواهد بود.
نصب و تنظیمات وب سرور آپاچی در لینوکس
در این قسمت، مراحل نصب و تنظیمات آپاچی در لینوکس RHEL7/CentOS7 توضیح خواهیم داد. لطفاً برای اجرای دستورات زیر به سرور CentOS7 خود وارد شوید.
نحوه نصب وب سرور با Apache با دستور:
نصب وب سرور Apache از پکیجهای گروه آپاچی با دستور:
نحوه شروع و متوقف کردن و راه اندازی مجدد وب سرور لینوکس آپاچی
مراحل زیر نحوه شروع؛ توقف و راه اندازی مجدد وب سرور آپاچی برای سیستم عامل توزیع لینوکس RHEL7/CentOS7 را نشان میدهد. این دستور در سایر توزیعهای لینوکس کمی متفاوت است.
- برای شروع سرویس آپاچی:
- برای توقف سرویس آپاچی:
- برای راه اندازی مجدد سرویس آپاچی:
نحوه فعال سازی وب سرور آپاچی در قسمت بوت:
systemctl enable httpd # Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
تنظیمات آپاچی در لینوکس ( Apache http در لینوکس )
پیش از آنکه بخواهیم تنظیمات آپاچی در لینوکس را توضیح دهیم لازم است تا مروری بر روی apache httpd conf file داشته باشیم.
httpd.conf فایل پیکربندی اولیه در وب سرور Apache بوده و درتوزیعهای لینوکس RHEL و CentOS بکار میرود. این فایل، در پوشه / etc / httpd / conf قرار دارد. httpd.conf یک فایل متنی است و از دایرکتوریها؛ کانتینرها و کامنتها تشکیل شده است.
مثالی از دایرکتوریها (directives) در httpd.conf:
- ServerRoot
- Listen
- Include
- AllowOverride
مثالی از کانتینرها (containers):
کانتیرها یک یا چند دایرکتوری را ضمیمه میکنند.
<Directory /> AllowOverride none Require all denied </Directory>
مثالی از کامنتها (comments):
Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the # directive. #
پیکربندی فایل Apache httpd.conf configuration
پیش از شروع اجرای وب سرور آپاچی، باید چندین مورد از تنظیمات این سرور را تغییر دهید. کل فایل پیکربندی اصلی، از فایل httpd.conf تشکیل شده است:
دایرکتوریهای زیر را تغییر داده و مقدار آن را با محیط وب سرور خود مطابقت دهید:
- آدرس ایمیل ServerAdmin:
در این قسمت، مشکل شما با سرور باید از طریق پست الکترونیکی(ایمیل) ارسال شود. این آدرس در برخی از صفحات ایجاد شده توسط سرور مانند error documents ظاهر میشود.
برای مثال:
- DocumentRoot:
استفاده از دایرکتوری سطح بالا برای محتوای سرور آپاچی. هیچگاه اسلش(/) را در انتهای مسیر دایرکتوری(directory) قرار ندهید.
برای مثال:
- نام سرور FQDN:
FQDN باید در یک آدرس IP مجاز باشد. در صورتی که FQDN را مشخص نکنید، سرور بر روی آدرس IP یک جستجوی نام معکوس انجام میدهد. در صورت مشخص نکردن پورت نیز، سرور از پورت متناسب با درخواست ورودی استفاده میکند.
برای مثال:
- انجام تنظیمات دستور AllowOverride:
در نسخه ۲.۴ آپاچی، AllowOverride بهصورت پیش فرض روی حالت None تنظیم شدهاست. بنابراین، فایلهای سیستمیhtaccess .کاملاً نادیده گرفته میشوند. در این حالت، سرور کوچکترین تلاشی برای خواندن فایلهای سیستمی نخواهد کرد. اما، زمانی که دستور AllowOverride روی All تنظیم شده باشد، آنگاه سرور هر دستوری که دارای محتوای htaccess . است را خوانده و اجرا میکند.
برای مثال:
اگر یک وب سایت واحد را اداره میکنید، تنظیمات فوق برای وب سرور apache شما کافی است. برای اعمال پیکربندی جدید، وب سرویس Apache را بارگیری مجدد (restart یا reload)کنید:
یا
دسترسی به آدرس IP وب سرور:
- یکر بندی میزبانهای مجازی Apache
در صورتی که چندین وب سایت را اداره میکنید، میتوانید میزبان مجازی (هاست مجازی یا Virtual Host) Apache را مطابق مراحل زیر پیکربندی کنید:
میزبان مجازی Apache به یک وب سرور httpd اجازه میدهد تا محتوا را برای چندین دامنه یا وب سایت ارائه دهد. میزبان مجازی در یک کانتیر میزبان مجازی(VirtualHost) تعریف میشود. چندین کانتینر مجازی برای چندین دامنه در دایرکتوری میزبان مجازی مشخص شده است.
در کجا میتوان دستورالعمل میزبان مجازی را مشخص کرد؟
میزبانهای مجازی با استفاده از بلوک < virtualhost >در پیکربندی اصلی مشخص میشوند. برای سهولت در استفاده، بهتر است بلوک هاست مجازی در داخل /etc/httpd/conf/httpd.conf تعریف نشده باشد. در عوض، فایلهای پیکربندی جداگانه جدیدی را در etc/httpd/conf.d/ / ایجاد نمایید. برای مشخص کردن بلوک < virtualhost> ، فایل پیکربندی جداگانه ایجاد کنید:
برای مثال:
<VirtualHost 10.1.1.106:80> DocumentRoot /var/www/html/website1 ServerName website1.ehowstuff.local ServerAdmin admin@ehowstuff.local ErrorLog "logs/website1.ehowstuff.local_error_log" CustomLog "logs/website1.ehowstuff.local_access_log" combined </VirtualHost>
<VirtualHost 10.1.1.106:80> DocumentRoot /var/www/html/website2 ServerName website2.ehowstuff.local ServerAdmin admin@ehowstuff.local ErrorLog "logs/website2.ehowstuff.local_error_log" CustomLog "logs/website2.ehowstuff.local_access_log" combined </VirtualHost>
یکی از نمونه های index.html یا index.php را در هر دو document root بارگذاری کنید.
برای اعمال پیکربندی جدید، وب سرویس Apache را بارگیری مجدد restart) یا (reload کنید:
یا
مرحله ششم:تنظیم فایروال
مرحله آخر در تنظیمات آپاچی در لینوکس ، تنظیم Firewall است.
Firewall را به گونهای تنظیم کنید تا در لینوکس، امکان دسترسی به سرور Apache http وجود داشته باشد.
به طور پیش فرض، پورت ۸۰ مسدود شده است. سرویس HTTP را در فایروال مجاز کنید.
(host-based firewall for centOS 7) HTTP uses 80/TCP and HTTPS uses 443/TCP # firewall-cmd --add-service=http –permanent # firewall-cmd --add-service=https --permanent # firewall-cmd –reload
در پایان، شما میتوانید به هر دو آدرس اینترنتی مجازی(URL مجازی) دسترسی پیدا کنید. نتیجه به دست آمده از تنظیمات آپاچی در لینوکس خود را میتوانید در زیر مشاهده نمایید:
نحوه بهینه سازی عملکرد آپاچی با غیر فعال کردن HostnameLookup
یکی از گزینههایی که برای بهینه سازی باید بررسی شود HostnameLookup است. با تغییر در این گزینه کاربران میتوانند فرمت خروجی فایل لاگ را مشخص کنند. به صورت پیش فرض وب سرور آپاچی تمام درخواستها را در فایل access.log ذخیره میکند. این فایل در مسیر apache_dir/etc قرار گرفته است. اگر قابلیت HostnameLookup فعال باشد، وب سرور آپاچی تلاش میکند تا hostname منبع درخواست را Resolve کند. قبل از وب سرور آپاچی نسخهی ۱.۳ این قابلیت به صورت پیش فرض روی on قرار داشت که باعث میشد به هر درخواست زمان تاخیری (Latency) اضافه شود. از آپاچی نسخهی ۱.۳ به بالا این گزینه به صورت پیش فرض روی off قرار دارد. به همین دلیل در فایل لاگ آپاچی تمام درخواست تنها دارای یک آدرس IP هستند و دیگر hostname آنها درج نمیشود.
در صورتیکه نیاز دارید هر آدرس IP که به وب سرور شما درخواست ارسال میکند به hostname آن Resolve شود و در فایل لاگ ذخیره شود، میتوانید از برنامهی logresolve که به همراه Apache ارایه میشود برای انجام این مورد استفاده کنید.
Logresolve یک برنامهی پردازش آدرس IP بعد از ذخیره سازی است که توسط وب سرور آپاچی ارایه میشود و میتوان گفت جایگزین مناسب آپاچی است. از طریق این برنامه شما میتوانید فایلهای لاگ ذخیره شده توسط وب سرور آپاچی را برای Resolve آی پیهای داخل آن به hostname ها استفاده نمایید. این مورد برای کاهش بار پردازشی بر روی سرور شما یک کش hash-table اختصاصی خود را دارد که بار اضافی بر روی سرور شما نمیگذارد. این کش مطرح شده بدان معنا است که هر IP تنها یک بار بررسی میشود و در صورت تکرار دیگر مجدد برای یافتن hostname بررسی نشده و از روی جدول کش خود hostname را درج میکند.
برای عملکرد بهتر کلی وب سرور ما پیشنهاد میکنیم از ابزارهای آنالیز و پردازش بعد از ذخیره سازی اولیه لاگها در یک سرور دیگر استفاده کنید. این کار باعث میشود که مشکلات عملکردی در هنگام انجام پردازشهای آنالیزی نداشته باشید.
بنابراین ما متوجه شدیم عملکرد Hostname Lookup در وب سرور آپاچی در واقع چه کاری را انجام میدهد. در واقع Hostname Lookup آپاچی طی هر درخواستی که دریافت میکند یک جستجوی معکوس DNS را به ازای هر آی پی از سرویس گیرندهای IP مورد نظر انجام میدهد. این فرایند یک پروسه دو مرحله ای دارد که در آن ابتدا یک جتسجوی معکوس انجام شده و در ادامه یک Forward Lookup انجام میشود تا نام هاست (Hostname) را با آدرس آی پی مطابقت دهد.
برای غیر فعال کردن گزینهی Hostname Lookup در آپاچی نیاز است که فایل کانفیگ آپاچی را با ادیتور مورد علاقهی خود باز نموده و کد زیر را در فایل یافته و آن را تغییر دهید:
HostnameLookups Off
با قرار دادن عبارت Off (به کوچک و بزر بودن حروف دقت نمایید) میتوانید این گزینه را در آپاچی غیر فعال نمایید. پس از غیر فعال سازی نیاز است که یک بار سرویس مربوط به وب سرور خود را (در اینجا آپاچی) ریست نمایید. بدین منظور میتوانید از دستور زیر استفاده فرمایید:
برای سیستم عاملهایی همانند CentOS
service restart httpd
برای سیستم عاملهایی همانند Ubuntu
service restart apache2
اگر موفق به یافتن محل ذخیره سازی فایلهای کانفیگ آپاچی نشدید میتوانید دو آدرس زیر را بررسی کنید. عموما فایلهای کانفیگ آپاچی در مسیرهای زیر قرار میگیرند:
/etc/apache/httpd.conf
یا
/etc/apache2/ apache2.conf
بهینه سازی عملکرد آپاچی با خاموش کردن HostName Lookup
همانطور که در بالاتر اشاره شد یکی از پیشنهاد های رایج برای بهینه سازی وب سرور آپاچی این است که HostName Lookup غیر فعال شود زیرا فعال بودن آن باعث افزایش تاخیر و کند شدن وب سایتها میشود. خاموش کردن آن نیز ایده خوبی است اما :
جدا از تنظیمات، زمانی که mod_authz_host برای کنترل دسترسی بوسیله hostname استفاده شود یک جستجوی معکوس دوتایی انجام میپذیرد.
mod_authz_host یک ماژول آپاچی است که برای کنترل پذیرفتن یا رد کردن دسترسیها، بر اساس آدرس IP یا نام هاست مورد استفاده قرار میگیرد. مشکل زمانی بروز میکند که شما بخواهید از نام هاست به جای آی پی استفاده کنید.
برای مثال :
Order Deny,Allow
Deny from user.isp.com
اگر این کد را در یک فایل Htaccess یا فایل پیکربندی virtual host استفاده کنید، حتی اگر شما جستجوی Host Name را هم خاموش کرده باشید وب سرور آپاچی باز هم یک جستجوی معکوس DNS انجام میدهد. شاید این مشکل بزرگی به نظر نرسد اما برخی از آی پی آدرسها دارای رکورد PTR نیستند. لذا اگر IP یک کاربر توسط ISP به او اختصاص داده شده باشد این کاربر با کندی هنگام بارگذاری وب سایت یا اپلیکیشن شما مواجه خواهد شد.
راه حل این مشکل تنها استفاده از آدرس IP برای Deny کردن دسترسی است :
Order Deny,Allow
Deny from 192.168.0.1
اگر نمی توانید از به کار بردن host name صرف نظر کنید، به جای اینکه این تنظیمات را بر کل virtual host اعمال کنید می توانید از قوانین allow/deny برای پوشه ها یا فایلهای خاص استفاده کنید. به یاد داشته باشید، جستجوی معکوس DNS تنها زمانی اتفاق می افتد که آپاچی با این فرامین روبرو شود. بدین منظور پیشنهاد میشود نگاهی به FilesMatch و DirectoryMatch بیاندازید.
در نظر داشته باشید در کنار وب سرور Apache می توانید از وب سرور Nginx هم میتوانید استفاده کنید که برای بارگذاری وب سایتهایی با فایلهای استاتیک به مراتب بهینهتر است. امیدواریم با خواندن این مقاله با مفهوم وب سرور آپاچی چیست آشنا شده باشید. همچنین به شما پیشنهاد می شود برای کسب اطلاعات در حوزه nginx چیست مقاله ما را مطالعه نمایید.
این مقاله توسط تیم ایران هاست، ارائه دهنده انواع سرور اختصاصی ایران تولید شده است، نظرات و پیشنهادات خود را در نظرات با ما در میان بگذارید.