معرفی
آپاچی HTTP Server که معمولاً با نامهای «Apache» یا «httpd» شناخته میشود، یک وبسرور متنباز برای دریافت درخواستهای HTTP و HTTPS و ارسال پاسخ به مرورگرها یا سرویسهای دیگر است. این ابزار میتواند فایلهای ایستا مانند HTML، CSS، JavaScript و تصاویر را ارائه کند، چند دامنه را با استفاده از میزبان مجازی (VirtualHost) روی یک سرور میزبانی کند و ترافیک را از طریق پراکسی معکوس (Reverse Proxy) به برنامههای بکاند هدایت کند.
قابلیتهای Apache عمدتاً از طریق ماژولها فراهم میشوند. برای مثال، موارد زیر را در نظر بگیرید:
mod_ssl برای پشتیبانی از SSL/TLS
mod_rewrite برای بازنویسی نشانیها (URL)
mod_proxy به همراه ماژولهای پروتکل مرتبط برای راهاندازی پراکسی
Apache همچنین از ماژول چندپردازشی (Multi-Processing Module یا MPM) برای تعیین شیوه پردازش درخواستها استفاده میکند. در هر لحظه فقط یک MPM فعال است و گزینههای رایج آن شامل event، worker و prefork هستند.
ساختار پیکربندی و نحوه استفاده
تنظیمات Apache معمولاً در فایلهای پیکربندی اصلی سرور و بخشهای مربوط به VirtualHost قرار میگیرند. فایل .htaccess نیز در برخی محیطهای میزبانی اشتراکی کاربرد دارد و امکان تعریف تعدادی از قواعد پیکربندی را در سطح پوشه فراهم میکند. استفاده از دستورها در این فایل به تنظیماتی مانند AllowOverride وابسته است.
اگر به پیکربندی اصلی سرور دسترسی دارید، نگهداری قواعد در همان فایلها معمولاً از نظر عملکرد، امنیت و عیبیابی انتخاب مناسبتری است.
توسعهدهندگان بکاند، مدیران سیستم لینوکس و مهندسان دواپس از Apache برای میزبانی برنامههای وب، وبسایتهای PHP و ایجاد یک لایه پراکسی در مقابل سرویسهای داخلی استفاده میکنند. برای نمونه، در یک پیکربندی PHP میتوان درخواستها را برای پردازش به PHP-FPM فرستاد. همچنین، در نقش Reverse Proxy میتوان درخواستهای ورودی را به برنامهای هدایت کرد که روی سرویس یا پورت دیگری اجرا میشود.
چه زمانی Apache را انتخاب کنید؟
Apache انتخاب مناسبی است اگر وبسایت یا محیط میزبانی شما به قواعد .htaccess وابسته باشد، پیکربندیهای موجود PHP و VirtualHost داشته باشید یا لازم باشد تنظیمات متفاوتی را برای چند دامنه روی یک سرور مدیریت کنید.
در هاست اشتراکی ممکن است اختیار شما به فایل .htaccess محدود باشد؛ اما در سرور مجازی یا اختصاصی بهتر است تا حد امکان تنظیمات را در فایلهای اصلی و بخشهای VirtualHost نگه دارید.
اگر پراکسی معکوس و ارائه فایلهای ایستا بخش اصلی نیاز پروژه شماست، Nginx نیز گزینهای رایج برای مقایسه است. اگر راهاندازی ساده و مدیریت خودکار گواهی HTTPS اولویت بیشتری دارد، Caddy را بررسی کنید. Traefik نیز بیشتر برای مسیریابی پویا میان سرویسها و محیطهای کانتینری کاربرد دارد.
در نهایت، انتخاب میان این ابزارها باید براساس معماری موجود، نیازهای پروژه و توانایی تیم برای پیکربندی و نگهداری سرویس انجام شود.
ویژگیهای کلیدی
موارد زیر تصویری کلی از این بخش برای این ابزار ارائه میکنند.
-
معماری ماژولار
بسیاری از قابلیتهای Apache با ماژولها اضافه میشوند. برای مثال mod_ssl برای TLS، mod_proxy برای پراکسی، mod_rewrite برای بازنویسی نشانی و mod_deflate برای فشردهسازی پاسخ کاربرد دارند. بهتر است فقط قابلیتها و ماژولهای موردنیاز سرور فعال باشند.
-
مدلهای پردازش درخواست با MPM
Apache از MPMها برای تعیین مدل پردازش درخواست استفاده میکند. prefork بر چند فرایند تکریسمانی تکیه دارد، در حالی که worker و event از مدل چندریسمانی استفاده میکنند. event برای مدیریت بهتر اتصالهایی مانند Keep-Alive طراحی شده است. انتخاب MPM میتواند بر مصرف منابع و مقیاسپذیری سرور اثر بگذارد.
-
میزبانی چند دامنه با VirtualHost
برای دامنهها و زیردامنههای مختلف میتوان VirtualHostهای جدا با ServerName، مسیر فایل، گواهی TLS، لاگ و قواعد دسترسی متفاوت تعریف کرد.
-
پراکسی معکوس و توزیع درخواست
mod_proxy همراه با ماژول پروتکل مربوط امکان هدایت درخواستها به Backend را فراهم میکند. برای نمونه، mod_proxy_http برای HTTP و mod_proxy_fcgi برای FastCGI کاربرد دارد. در یک Reverse Proxy معمولاً از ProxyPass و ProxyPassReverse استفاده میشود.
-
بازنویسی و تغییرمسیر نشانیها
با mod_rewrite میتوان قواعد بازنویسی و Redirectهای شرطی تعریف کرد. قواعد پیچیده را بهتر است پیش از اعمال در محیط عملیاتی آزمایش کنید تا خطاهایی مانند حلقه Redirect یا پاسخ ۵۰۰ ایجاد نشوند.
-
کنترل دسترسی و احراز هویت
Apache امکان محدودکردن دسترسی به منابع براساس کاربران، گروهها، شبکه و سایر شرایط پیکربندی را فراهم میکند. این قابلیت میتواند بخشی از کنترل دسترسی زیرساخت باشد، اما جای مجوزها و کنترل دسترسی داخل برنامه را نمیگیرد.
-
لاگگیری قابل تنظیم
Access Log و Error Log را میتوان برای VirtualHostهای مختلف جدا کرد و قالب ثبت اطلاعات را نیز تنظیم کرد. در محیط عملیاتی باید چرخش لاگ و مصرف فضای دیسک نیز مدیریت شود.
-
پیکربندی با .htaccess در میزبانی اشتراکی
فایل .htaccess امکان اعمال برخی تنظیمات در سطح دایرکتوری را بدون ویرایش مستقیم پیکربندی اصلی Apache فراهم میکند. دستورهای مجاز آن با AllowOverride و AllowOverrideList کنترل میشوند. وقتی دسترسی به پیکربندی اصلی دارید، مستندات Apache استفاده از تنظیمات اصلی سرور را به .htaccess ترجیح میدهند.
کاربردها
برای آشنایی بهتر با این ابزار، توجه به موارد زیر میتواند مفید باشد.
-
میزبانی وبسایتهای PHP
برای سرویسدهی فایلهای سایت و ارسال درخواستهای PHP به PHP-FPM، بهویژه در سرورهای لینوکسی و کنترلپنلهای میزبانی وب.
-
اجرای چند وبسایت روی یک سرور
وقتی چند دامنه با تنظیمات، گواهی TLS و مسیر فایل جداگانه باید از یک ماشین یا ماشین مجازی سرویس بگیرند.
-
پراکسی معکوس جلوی سرویس بکاند
برای دریافت ترافیک HTTPS از اینترنت و هدایت آن به برنامهای که روی پورت داخلی اجرا میشود، مانند سرویس Java، Node.js یا Python.
-
انتقال دامنه و حفظ پیوندهای قدیمی
برای تعریف تغییرمسیرهای دائمی و قوانین بازنویسی، تا نشانیهای قدیمی پس از تغییر ساختار سایت یا انتقال دامنه از کار نیفتند.
-
محافظت از بخشهای داخلی وب
برای محدود کردن دسترسی به داشبوردهای مدیریتی، فایلهای حساس یا محیط آزمایشی با قواعد شبکه و احراز هویت.
-
راهاندازی امن یک دامنه روی سرور مجازی
یک VirtualHost با ServerName و DocumentRoot بسازید، ماژول TLS را فعال و گواهی را تعریف کنید. سپس با apachectl -t یا httpd -t، متناسب با توزیع لینوکس، اعتبار تنظیمات را بررسی و سرویس را reload کنید. دریافت پاسخ HTTPS درست از دامنه و نبود خطای تازه در access log و error log نشان میدهد پیکربندی اولیه درست عمل میکند.
ابزارهای جایگزین
ابزارهای زیر نزدیکترین جایگزینها برای آپاچی HTTP Server به شمار میروند.
پرسشهای رایج درباره آپاچی HTTP Server
در این بخش، به تعدادی از پرسشهای رایج درباره این ابزار پاسخ داده شده است.
تفاوت Apache HTTP Server، Nginx، Caddy و Traefik چیست؟
Apache برای سازگاری با .htaccess، پیکربندیهای موجود PHP و تنظیمات ماژولار مناسب است. Nginx معمولاً برای پراکسی معکوس و فایلهای ایستا بررسی میشود. Caddy راهاندازی HTTPS خودکار را سادهتر میکند. Traefik بیشتر برای مسیریابی پویای سرویسها، بهویژه در محیطهای کانتینری، کاربرد دارد. انتخاب به معماری سرویس و توان تیم برای نگهداری تنظیمات بستگی دارد.
آیا برای استفاده از Apache باید برنامهنویسی بدانم؟
برای راهاندازی ساده، بیشتر به لینوکس، شبکه، DNS، TLS و خواندن فایلهای پیکربندی نیاز دارید. برای تنظیم پراکسی جلوی یک برنامه وب، شناخت نحوه اجرای همان برنامه و پورتهای آن نیز لازم است.
فایل .htaccess چه زمانی مناسب است؟
در میزبانی اشتراکی که به فایل پیکربندی اصلی سرور دسترسی ندارید، .htaccess میتواند مفید باشد. پیش از استفاده، محدودیتهای میزبان و فعالبودن ماژولهای لازم را بررسی کنید. در سرورهای تحت مدیریت خودتان، معمولاً بهتر است تنظیمات را در فایلهای اصلی Apache یا VirtualHost نگه دارید تا کنترل و عیبیابی شفافتر باشد.
آیا Apache برای اجرای PHP مناسب است؟
بله. Apache میتواند درخواستهای PHP را به PHP-FPM ارسال کند یا در برخی پیکربندیها از ماژول PHP استفاده کند. PHP-FPM معمولاً جداسازی بهتر فرایندها و مدیریت انعطافپذیرتر نسخههای PHP را ممکن میکند.
پس از تغییر تنظیمات Apache چه باید کرد؟
ابتدا اعتبار پیکربندی را با apachectl -t یا httpd -t، متناسب با توزیع لینوکس، بررسی کنید. سپس سرویس را reload یا restart کنید. پیش از اعمال تغییر در محیط عملیاتی، از فایل پیکربندی نسخه پشتیبان بگیرید و لاگ خطا را بررسی کنید.