نحوه تنظیم سرور وب آپاچی روی سرور مجازی لینوکس (VPS)
۲۵ دی ۱۴۰۳
مقدمه
آپاچی (Apache) یکی از محبوبترین سرورهای وب در اینترنت است. این سرور بیش از نیمی از تمام وبسایتهای فعال در جهان را سرویسدهی میکند. اگرچه سرورهای وب بسیاری وجود دارند که میتوانند محتوای شما را در بستر اینترنت، نمایش دهند، اما آشنایی با نحوه عملکرد آپاچی به دلیل همهگیر بودن آن، مفید است.
این مقاله به بررسی برخی از فایلهای پیکربندی عمومی و گزینههایی که امکان کنترل کردنشان در Apache وجود دارد، میپردازد. این مقاله ساختار فایلهای پیکربندی آپاچی در سرور مجازی Ubuntu را بررسی خواهد کرد (که با توزیعهای دیگر لینوکس متفاوت است).
پیشنیازها
برای استفاده بهینه از مقاله، پیشنهاد میشود الزامات نرمافزاری زیر را، رعایت کنید:
- سرور مجازی با سیستمعامل Ubuntu همراه با یک کاربر non-root با دسترسیهای sudo و یک فایروال فعال (در صورتی که چنین کاربر فعالی در سرور مجازی خود ندارید، میتوانید به این مقاله، مراجعه کنید).
- Apache (در صورتی که آپاچی روی سرورتان نصب نیست، در ابتدا باید آن را نصب کنید).
همچنین برای درک کامل مقاله، توصیه میشود در ابتدا، به مطالعه و بررسی مقالههای زیر، بپردازید:
- سرور مجازی یا VPS چیست؟ معرفی انواع VPS + کاربردها
- SSH چیست؟ + نحوه استفاده از SSH برای اتصال به سرور مجازی (VPS)
۵ مرحله برای پیکربندی Apache Web Server روی اوبونتو (Ubuntu)
- ساختار فایلهای آپاچی
- بررسی فایل
Apache2.conf
- تنظیم پیکربندیهای عمومی آپاچی
- راهاندازی Virtual Host File (فایلِ هاستِ مجازی) آپاچی
- فعالسازی سایتها و ماژولها
مرحله اول: ساختار فایلهای آپاچی (File Hierarchy)
آپاچی فایلهای پیکربندی اصلی خود را در پوشه /etc/apache2
نگه میدارد. دستور زیر، تمام فایلهای موجود در این پوشه را لیست خواهد کرد:
ls -f /etc/apache2
خروجی دستور فوق، مشابه قطعه کد زیر است:
envars sites-available . apache2.conf .. sites-enabled mods-available ports.conf magic mods-enabled conf-enabled conf-available
در این پوشه، تعدادی فایل متنی (plaintext) و چندتا subdirectory (زیرپوشه) وجود دارد. در ادامه، به معرفی برخی از پرکاربردترین فایلها و subdirectoryها خواهیم پرداخت
apache2.conf
: این فایل، فایل پیکربندی (configuration file) اصلی سرور است. تقریباً تمام پیکربندیها را میتوان در این فایل انجام داد، اگرچه توصیه میشود برای هر پیکربندیای، از فایلهای جداگانه و اختصاصی، برای سادگی کار استفاده کنید. این فایل، پیکربندیهای پیشفرض را تنظیم کرده و یک نقطه مرکزی دسترسی، برای خواندن جزئیات پیکربندی، توسط سرور، خواهد بود.ports.conf
: این فایل برای مشخص کردن پورتهایی است که هاستهای مجازی باید بر روی آنها گوش دهند. اگر در حال پیکربندی SSL هستید، مطمئن شوید که تنظیمات این فایل درست است.sites-available/
وsites-enabled/
: پوشهsites-available
حاوی پیکربندیِ فایلهای هاست مجازی است. پیکربندیهای موجود در این پوشه مشخص میکند که چه محتوایی برای کدام درخواستها سرویسدهی شوند. این کار از طریق پیوند این پوشه به پوشهsites-enabled
که شامل فایلهای پیکربندی فعال هاست مجازی است، انجام میشود. زمانی که آپاچی شروع یا مجدداً بارگذاری میشود، فایلهای پیکربندی و پیوندها از پوشهsites-enabled
خوانده میشوند و یک پیکربندی کامل، کامپایل میشود.conf-available/
وconf-enabled/
: این پوشهها شامل پیکربندیهایی هستند که به فایلهای پیکربندی هاستهای مجازی، متصل نیستند.mods-enabled/
وmods-available/
: این پوشهها، ماژولهایی را تعریف میکنند که میتوانند به طور اختیاری، بارگذاری شوند. این پوشهها دو بخش دارند: فایلهایی با پسوند.load
که برای بارگذاری ماژولهای خاص به کار میروند و فایلهایی با پسوند.conf
که پیکربندیهای این ماژولها را ذخیره میکنند.
پیکربندی آپاچی در یک فایل تکی انجام نمیشود، بلکه از طریق یک طراحی ماژولار صورت میگیرد که در آن میتوان فایلهای جدیدی را بسته به نیاز اضافه کرد یا تغییر داد.
مرحله دوم – بررسی فایل apache2.conf
جزئیات مربوط به پیکربندی اصلی برای سرور آپاچی شما در فایل /etc/apache2/apache2.conf
قرار دارد. این فایل به سه بخش اصلی تقسیم میشود:
- پیکربندی مربوط به پردازشهای عمومی سرور Apache
- پیکربندی مربوط به سرور پیشفرض
- پیکربندیِ هاستهای مجازی
این فایل را با ویرایشگر متن مورد علاقه خود باز کنید. در مثال زیر از nano
استفاده شده است:
sudo nano /etc/apache2/apache2.conf
در Ubuntu، این فایل برای پیکربندی تعاریف عمومی، استفاده میشود. در این فایل، سرور پیشفرض و هاستهای مجازی، از طریق دستور Include
، پیکربندی میشوند. دستور Include
به آپاچی این امکان را میدهد که فایلهای پیکربندی دیگر را در فایل کنونی، در محلی که دستور قرار دارد، بخواند. نتیجه این است که Apache به طور پویا، یک فایل پیکربندی جامع، در زمان شروع به کار، ایجاد میکند.
در داخل فایل apache2.conf
تعدادی دستور Include
و IncludeOptional
وجود دارد. این دستورات، ماژولها، فایل ports.conf
، فایلهای پیکربندی خاص در پوشه conf-enabled/
و هاست مجازی در پوشه sites-enabled/
را، بارگذاری میکنند:
…
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
…
Include ports.conf
…
IncludeOptional conf-enabled/*.conf
…
IncludeOptional sites-enabled/*.conf
مرحله سوم: پیکربندی تنظیمات عمومی (global) در Apache
یکسری option در Apache وجود دارد که شاید بخواهید آنها را به صورت کلی، تغییر دهید. در ادامه، به معرفی هر یک از این گزینهها، خواهیم پرداخت.
پارامتر Timeout
به طور پیشفرض، این پارامتر روی ۳۰۰ تنظیم شده است. این بدین معناست که سرور، حداکثر ۳۰۰ ثانیه برای پاسخ به هر درخواست زمان دارد. این پارامتر بهتر است که چیزی بین ۳۰ تا ۶۰ ثانیه، کاهش پیدا کند.
پارامتر KeepAlive
این گزینه، در صورتی که روی On
تنظیم شود، به هر اتصال، اجازه میدهد که باز بماند تا درخواستهای متعدد همان کلاینت را پردازش کند. اگر این گزینه روی Off
تنظیم شود، هر درخواست، یک اتصال جدید برقرار میکند که ممکن است بسته به پیکربندی شما و وضعیت ترافیک، سربار (overhead) قابل توجهی ایجاد کند.
پارامتر MaxKeepAliveRequests
این گزینه تعیین میکند که هر اتصال، چند درخواست مستقل را، قبل از قطع شدن، پردازش کند. زیاد بودن مقدار این پارامتر، به آپاچی این امکان را میدهد که به طور مؤثرتر، محتوای بیشتری به هر کلاینت، ارائه دهد. مقدار پیشفرض این متغیر، روی ۱۰۰ تنظیم شده است. تنظیم این مقدار روی ۰، مقدار درخواست در هر اتصال را، بر روی بینهایت، تنظیم میکند
پارامتر KeepAliveTimeout
این پارامتر، مشخص میکند که هر اتصال، پس از اتمام درخواست قبلی، چقدر باید منتظر درخواست بعدی بماند. اگر زمان مشخص شده، به پایان برسد، اتصال قطع خواهد شد. به این معنی که دفعه بعد که محتوایی درخواست میشود، سرور یک اتصال جدید برقرار میکند تا درخواست محتوای صفحهای که کلاینت در حال بازدید است را، پردازش کند. مقدار پیشفرض این پارامتر، روی ۵ تنظیم شده است.
پس از بررسی محتوای این فایل پیکربندی، میتوانید با فشردن CTRL+X
آن را ببندید.
ماژولهای Multi-Processing
یک ماژول Multi-Processing یا MPM، طراحی ماژولار Apache را گسترش میدهد. MPMها مسئول گوش دادن، هدایت و پردازش درخواستهای مختلف شبکه هستند. میتوانید با استفاده از دستور زیر، بخشهایی که آپاچی شما در آن کامپایل شده است را بررسی کنید:
apache2 -L
خروجی دستور فوق، مشابه زیر است:
Compiled in modules:
core.c
mod_so.c
mod_watchdog.c
http_core.c
mod_log_config.c
mod_logio.c
mod_version.c
mod_unixd.c
برای بررسی نوع MPM روی سرور خود، میتوانید از دستور زیر استفاده کنید:
a2query -M
خروجی دستور فوق، مشابه زیر است:
event
خروجی نشان میدهد که ماژول MPM از نوع event است. Apache شما ممکن است چندین گزینه برای انتخاب داشته باشد، اما تنها یک مورد میتواند انتخاب شود.
مرحله چهارم: بهروزرسانی فایل Virtual Host در Apache
تعریفِ پیشفرض Virtual Host (هاست مجازی)، در فایلی به نام 000-default.conf
در پوشه sites-available/
قرار دارد. شما میتوانید با بررسی این فایل، با فرمت عمومی فایلهای هاست مجازی آشنا شوید. برای باز کردن این فایل از دستور زیر استفاده کنید:
sudo nano /etc/apache2/sites-available/000-default.conf
محتوای فایل /etc/apache2/sites-available/000-default.conf
به شکل زیر است:
<VirtualHost *:80>
…
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
…
ErrorLog ${APACHE LOG DIR}/error.log
CustomLog ${APACHE LOG DIR}/access.log combined
…
هاست مجازی پیشفرض، برای پردازش هر درخواستی که روی پورت ۸۰ (پورت استاندارد HTTP) دریافت شود، پیکربندی شده است. این امر، با قطعه کد *:80
، تعریف میشود. با این حال، به این معنا نیست که هر درخواست به سرور، حتماً توسط این پورت پردازش خواهد شد. Apache همواره از هاست مجازیای استفاده میکند که به طور خاص، با درخواست مطابقت دارد. اگر تعریفی خاصتر وجود داشته باشد، Apache، ممکن است این تعریف را جایگزین کند. پس از بررسی فایل فوق، میتوانید آن را با فشردن CTRL+X
ببندید.
پیکربندی Virtual Host در Apache
Optionهای زیر در تعریف Virtual Host، مستقل از هر تعریف سطح پایین دیگر، تنظیم میشوند و بر روی کل Virtual Host، اعمال میشوند. برای شروع، فایل security.conf
را که در پوشه conf-available/
قرار دارد باز کنید:
sudo nano /etc/apache2/conf-available/security.conf
این فایل شامل دستور ServerSignature
است که به شما این امکان را میدهد یک ایمیل را مشخص کنید که هنگام بروز مشکلات سرور، از آن، برای تماس، استفاده شود. شما میتوانید گزینه پیشفرض را از On
به EMail
تغییر دهید تا آدرس ایمیل مدیر سرور نمایش داده شود. اگر این تنظیم را تغییر دادید، مطمئن شوید که آمادگی دریافت ایمیلها را دارید:
…
ServerSignature EMail
…
پس از ویرایش فایل، با فشار دادن CTRL+O
تغییرات را دخیره کرده و سپس با فشردن CTRL+X
، از آن فایل، خارج شوید. بعد از ویرایش یک فایل پیکربندی، یک پیغام از شما خواسته میشود که تغییرات خود را تایید کنید. برای ذخیره تغییرات، Y
و برای لغو تغییرات، N
را فشار دهید.
در داخل فایل Virtual Host خود، میتوانید از دستور ServerName
استفاده کنید که نام دامنه یا آدرس IP را مشخص میکند. این گزینه به Virtual Host این امکان را میدهد که در صورت تطابق با مقدار ServerName
، خود را جایگزین تعریف پیشفرض کند.
برای باز کردن فایل Virtual Host خود از دستور زیر استفاده کنید و متغیر your_domain
را با نام دامنه واقعی خود جایگزین کنید:
sudo nano /etc/apache2/sites-available/your_domain.conf
سپس your_domain
را به دستور ServerName
اضافه کنید:
…
ServerName your_domain
…
همچنین، شما میتوانید از دستور ServerAlias
برای تنظیم Virtual Host روی بیش از یک نام استفاده کنید. این مسیرهای جایگزین، برای دسترسی به همان محتوا به کار میرود. یک مثال خوب از این کاربرد، اضافه کردن همان دامنه با پیشوند www
است:
…
ServerAlias www.your_domain.com
…
دستور DocumentRoot
مشخص میکند که محتوای درخواستی برای این Virtual Host، در کجا قرار دارد. در Ubuntu، هاست مجازی پیشفرض به گونهای تنظیم شده است که محتوا را از دایرکتوری /var/www/
سرو میکند:
…
DocumentRoot /var/www/your_domain/public_html
…
تعریف دایرکتوریها در Virtual Host
در داخل فایل پیکربندی Virtual Host، یکسری تعاریف در مورد نحوه مدیریت دایرکتوریهای مختلف در فایلسیستم وجود دارد. Apache این دستورات را به ترتیب از کوتاهترین دستور، به بلندترین دستور، اعمال میکند، بنابراین این امکان وجود دارد که تنظیمات قبلی را بازنویسی کنید.
برای باز کردن فایل apache2.conf
از دستور زیر استفاده کنید:
sudo nano /etc/apache2/apache2.conf
در این فایل، مثالهایی از تعریف دایرکتوریها آورده شده است:
…
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
…
اولین تعریف دایرکتوری، قوانین مربوط به دایرکتوری /
یا دایرکتوری ریشه را اعمال میکند. این تنظیمات، پیکربندی پایه Virtual Host شما را فراهم میکند، زیرا برای تمام فایلهایی که در فایلسیستم سرو میشوند اعمال خواهد شد. دقت کنید که گزینههای مختلف پیکربندی دایرکتوری، همراه با توضیحات مفید، در این فایل موجود است. این پیکربندی پیشفرض، دسترسی به تمام محتویات را منع میکند مگر اینکه در تعاریف دایرکتوریهای بعدی بهطور خاص مشخص شود.
دستور Require
میتواند دسترسی به منابع مختلف داخل سرور را، محدود یا باز کند. دستور AllowOverride
برای تصمیمگیری در مورد اینکه آیا فایل .htaccess
میتواند تنظیمات را در صورت وجود در دایرکتوری محتوا، بازنویسی کند یا نه، استفاده میشود. این ویژگی بهطور پیشفرض غیرفعال است، اما میتواند در شرایط مختلف مفید باشد. پس از بررسی محتوای این فایل، با فشار دادن CTRL+X
از آن خارج شوید.
دستورات Alias و ScriptAlias
تعریف دایرکتوریها گاهی اوقات با دستورات Alias
یا ScriptAlias
همراه هستند. برای باز کردن فایل پیکربندی Virtual Host خود از دستور زیر استفاده کنید و متغیر your_domain
را با نام دامنه واقعی خود جایگزین کنید:
sudo nano /etc/apache2/sites-available/your_domain.conf
دستور Alias
یک مسیر URL را به یک مسیر دایرکتوری نگاشت میکند. برای مثال، در هاست مجازیای که درخواستهای your_domain
را مدیریت میکند، دستور زیر دسترسی به محتویات موجود در /usr/local/apache/content/
را از طریق مسیر your_domain.com/content/
فراهم میکند:
Alias “/content/” “/usr/local/apache/content/”
دستور ScriptAlias
به همان شیوه عمل میکند، اما برای تعریف دایرکتوریهایی استفاده میشود که شامل کامپوننتهای executable هستند:
ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"
فراموش نکنید که دسترسیها را طبق آنچه که در بخش قبلی ذکر شد، برای دایرکتوریها تعریف کنید. پس از تکمیل ویرایشها، با فشار دادن CTRL+X
از فایل خارج شوید. اگر تغییراتی در فایل ایجاد کردهاید، برای ذخیره آنها Y
را فشار دهید یا برای نگهداشتن فایل بدون تغییرات، N
را فشار دهید.
مرحله پنجم: فعالسازی سایتها و ماژولها
پس از اینکه فایل Virtual Host شما طبق خواستههایتان، تنظیم شد؛ میتوانید از ابزارهای موجود در آپاچی برای تبدیل آن به وبسایتهای زنده استفاده کنید. برای ایجاد یک symbolic link در دایرکتوری sites-enabled
به یک فایل موجود در دایرکتوری sites-available
، دستور زیر را اجرا کنید. در نظر داشته باشید your_domain
را با نام Virtual Host خود جایگزین کنید:
sudo a2ensite your_domain
پس از فعالسازی سایت، دستور زیر را وارد کنید تا به Apache بگویید که فایلهای پیکربندی را دوباره بارگذاری کند تا تغییرات جدید، اعمال شوند:
sudo systemctl restart apache2
برای غیرفعالسازی Virtual Host نیز، دستور معادل وجود دارد. این دستور با حذف symbolic link از دایرکتوری sites-enabled
عمل میکند. بهطور مثال، برای غیرفعالسازی سایت پیشفرض 000-default
، دستور زیر را اجرا کنید:
sudo a2dissite 000-default
ماژولها نیز میتوانند با استفاده از دستورات a2enmod
و a2dismod
به ترتیب فعال یا غیرفعال شوند. این دستورات به همان شیوهای که a2ensite
و a2dissite
عمل کردند، عمل میکنند. بهطور مثال، برای فعالسازی ماژول info
، دستور زیر را وارد کنید:
sudo a2enmod info
همچنین، برای غیرفعالسازی یک ماژول از دستور a2dismod
استفاده کنید:
sudo a2dismod info
پس از اعمال تغییرات در فایلهای پیکربندی و فعال یا غیرفعال کردن ماژولها، فراموش نکنید که Apache را مجدداً راهاندازی کنید.
نتیجهگیری
Apache یک سرور وب چندمنظوره و بسیار ماژولار است، بنابراین پیکربندی آن، بسته به نوع نیاز شما، میتواند متفاوت باشد. پس از بررسی برخی از استفادههای عمومی از Apache در این مقاله، باید درک خوبی از کاربرد اصلی فایلهای پیکربندی و نحوه تعامل آنها با یکدیگر داشته باشید. امیدواریم که فایلهای پیکربندی، اکنون کمتر ترسناک به نظر برسند و احساس راحتی بیشتری در زمان آزمایش و تغییر آنها، متناسب با نیازهای خود، داشته باشید.
در صورتی که به دنبال یک سرور مجازی ارزان، با زیرساختی قوی و دائمی هستید؛ میتوانید از VPS لیارا، استفاده کنید. لیارا با ارائه سرورهای مجازی لینوکس، با آخرین بهروزرسانیها، به شما این امکان را میدهد تا سرور وب Apache خود را درون آن بالا بیاورید و با قدرت هرچه تمام، مسیر توسعه نرمافزارتان را، طی کنید.
همچنین بخوانید: مقایسه وبسرور Apache و NGINX؛ کدام را انتخاب کنیم؟