میزبانی وب

وب سرور آپاچی چیست؛ آشنایی با نصب وب سرور apache در لینوکس

یکی از انواع وب سرور آپاچی است. براساس نظرسنجی انجام شده توسط سایت 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 با دستور:

yum install httpd –y #

نصب وب سرور Apache از پکیج‌های گروه آپاچی با دستور:

yum groupinstall “Web Server” -y #

نحوه شروع و متوقف کردن و راه اندازی مجدد وب سرور لینوکس آپاچی

مراحل زیر نحوه شروع؛ توقف و راه اندازی مجدد وب سرور آپاچی برای سیستم عامل توزیع لینوکس RHEL7/CentOS7 را نشان می‌دهد. این دستور در سایر توزیع‌های لینوکس کمی متفاوت است.

  • برای شروع سرویس آپاچی:
systemctl start httpd #
  • برای توقف سرویس آپاچی:
systemctl stop httpd #
  • برای راه اندازی مجدد سرویس آپاچی:
systemctl restart httpd #

نحوه فعال سازی وب سرور آپاچی در قسمت بوت:

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 تشکیل شده است:

vi /etc/httpd/conf/httpd.conf #

دایرکتوری‌های زیر را تغییر داده و مقدار آن را با محیط وب سرور خود مطابقت دهید:

  • آدرس ایمیل ServerAdmin:

در این قسمت، مشکل شما با سرور باید از طریق پست الکترونیکی(ایمیل) ارسال شود. این آدرس در برخی از صفحات ایجاد شده توسط سرور مانند error documents  ظاهر می‌شود.

برای مثال:

ServerAdmin admin@your-domain.com
  • DocumentRoot:

استفاده از دایرکتوری سطح بالا برای محتوای سرور آپاچی. هیچگاه اسلش(/) را در انتهای مسیر دایرکتوری(directory)  قرار ندهید.

برای مثال:

DocumentRoot /var/www/html
  • نام سرور FQDN:

FQDN باید در یک آدرس IP مجاز باشد. در صورتی که FQDN را مشخص نکنید، سرور بر روی آدرس IP یک جستجوی نام معکوس انجام می‌دهد. در صورت مشخص نکردن پورت نیز، سرور از پورت متناسب با درخواست ورودی استفاده می‌کند.

برای مثال:

ServerName www.ehowstuff.local:۸۰
  • انجام تنظیمات دستور AllowOverride:

در نسخه ۲.۴ آپاچی، AllowOverride به‌صورت پیش فرض روی حالت None تنظیم شده‌است. بنابراین، فایل‌های سیستمیhtaccess .کاملاً نادیده گرفته می‌شوند. در این حالت، سرور کوچکترین تلاشی برای خواندن فایل‌های سیستمی  نخواهد کرد. اما، زمانی که دستور AllowOverride روی All تنظیم شده باشد، آنگاه سرور هر دستوری که دارای محتوای htaccess . است را خوانده و اجرا می‌کند.

برای مثال:

AllowOverride All

اگر یک وب سایت واحد را اداره می‌کنید، تنظیمات فوق برای وب سرور apache شما کافی است. برای اعمال پیکربندی جدید، وب سرویس Apache را بارگیری مجدد (restart  یا   reload)کنید:

systemctl restart httpd #

یا

systemctl reload httpd #

دسترسی به آدرس IP وب سرور:

نحوه نصب و راه اندازی Apache Web Server در لینوکس

  • یکر بندی میزبانهای مجازی Apache 

در صورتی که چندین وب سایت را اداره می‌کنید، می‌توانید میزبان مجازی (هاست مجازی یا Virtual Host) Apache را مطابق مراحل زیر پیکربندی کنید:

میزبان مجازی Apache به یک وب سرور httpd اجازه می‌دهد تا محتوا را برای چندین دامنه یا وب سایت ارائه دهد. میزبان مجازی در یک کانتیر میزبان مجازی(VirtualHost) تعریف می‌شود. چندین کانتینر مجازی برای چندین دامنه در دایرکتوری میزبان مجازی مشخص شده است.

در کجا می‌توان دستورالعمل میزبان مجازی را مشخص کرد؟

میزبان‌های مجازی با استفاده از بلوک < virtualhost >در پیکربندی اصلی مشخص می‌شوند. برای سهولت در استفاده، بهتر است بلوک هاست مجازی در داخل /etc/httpd/conf/httpd.conf تعریف نشده باشد. در عوض، فایل‌های پیکربندی جداگانه جدیدی را در etc/httpd/conf.d/ / ایجاد نمایید. برای مشخص کردن بلوک < virtualhost> ، فایل پیکربندی جداگانه ایجاد کنید:

vi /etc/httpd/conf.d/multiple-sites.conf #

برای مثال:

<VirtualHost 10.1.1.106:80>

DocumentRoot    /var/www/html/website1

ServerName      website1.ehowstuff.local

ServerAdmin     [email protected]

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     [email protected]

ErrorLog        "logs/website2.ehowstuff.local_error_log"

CustomLog       "logs/website2.ehowstuff.local_access_log" combined

</VirtualHost>

یکی از نمونه های index.html یا index.php را در هر دو document root بارگذاری کنید.

(/var/www/html/website1 and /var/www/html/website2).

برای اعمال پیکربندی جدید، وب سرویس Apache را بارگیری مجدد  restart) یا (reload کنید:

systemctl restart httpd #

یا

systemctl reload httpd #

مرحله ششم:تنظیم فایروال

مرحله آخر در تنظیمات آپاچی در لینوکس ، تنظیم 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 یا نام هاست مورد استفاده قرار می‌گیرد. مشکل زمانی بروز می‌کند که شما بخواهید از نام هاست به جای آی پی استفاده کنید.

آپاچی Hostname lookup

برای مثال :

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 چیست مقاله ما را مطالعه نمایید.

این مقاله توسط تیم ایران هاست، ارائه دهنده انواع سرور اختصاصی ایران تولید شده است، نظرات و پیشنهادات خود را در نظرات با ما در میان بگذارید.

اشکان نصیری

مدیر سرور در ایران هاست با +۵ سال سابقه در صنعت میزبانی وب و کارشناسی ارشد MBA

‫۴ دیدگاه ها

    1. عموما این مشکل زمانی رخ می‌دهد که فایل های کانفیگ آپاچی را به درستی ایجاد و تنظیم نکرده‌اید. یک بار مجدد تنظیماتی که برای Listen کردن آپاچی روی دامنه شما و پورت‌های وب تنظیم کرده اید را بازنگری فرمایید.

  1. سلام من یه سوال دارم.
    با اینکه پورت رو هم در my.ini و هم در php.ini از ۳۳۰۶ به ۳۳۰۷ تغییر دادم
    خطای زیر رو در logerror دریافت میکنم. میشه کمک کنید بفهمم این خطا مال چیه؟
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] InnoDB: Uses event mutexes
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] InnoDB: Compressed tables use zlib 1.2.11
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] InnoDB: Number of pools: 1
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] InnoDB: Using SSE2 crc32 instructions
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] InnoDB: Initializing buffer pool, total size = 16M, instances = 1, chunk size = 16M
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] InnoDB: Completed initialization of buffer pool
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] InnoDB: 128 out of 128 rollback segments are active.
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] InnoDB: Creating shared tablespace for temporary tables
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] InnoDB: Setting file ‘D:\p1\mysql\data\ibtmp1’ size to 12 MB. Physically writing the file full; Please wait …
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] InnoDB: File ‘D:\p1\mysql\data\ibtmp1’ size is now 12 MB.
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] InnoDB: Waiting for purge to start
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] InnoDB: 10.4.21 started; log sequence number 5003188; transaction id 3949
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] InnoDB: Loading buffer pool(s) from D:\p1\mysql\data\ib_buffer_pool
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] Plugin ‘FEEDBACK’ is disabled.
    ۲۰۲۱-۱۲-۴ ۱۵:۰۰:۱۰ ۰ [Note] Server socket created on IP: ‘::’.

دیدگاهتان را بنویسید

نوشته های مشابه

دکمه بازگشت به بالا