تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

    نحوه تنظیم سرور وب آپاچی روی سرور مجازی لینوکس (VPS)


    ۲۵ دی ۱۴۰۳

    مقدمه

    آپاچی (Apache) یکی از محبوب‌ترین سرورهای وب در اینترنت است. این سرور بیش از نیمی از تمام وب‌سایت‌های فعال در جهان را سرویس‌دهی می‌کند. اگرچه سرورهای وب بسیاری وجود دارند که می‌توانند محتوای شما را در بستر اینترنت، نمایش دهند، اما آشنایی با نحوه عملکرد آپاچی به دلیل همه‌گیر بودن آن، مفید است.

    این مقاله به بررسی برخی از فایل‌های پیکربندی عمومی و گزینه‌هایی که امکان کنترل کردن‌شان در Apache وجود دارد، می‌پردازد. این مقاله ساختار فایل‌های پیکربندی آپاچی در سرور مجازی Ubuntu را بررسی خواهد کرد (که با توزیع‌های دیگر لینوکس متفاوت است).

    پیش‌نیازها

    برای استفاده بهینه از مقاله، پیشنهاد می‌شود الزامات نرم‌افزاری زیر را، رعایت کنید:

    • سرور مجازی با سیستم‌عامل Ubuntu همراه با یک کاربر non-root با دسترسی‌های sudo و یک فایروال فعال (در صورتی که چنین کاربر فعالی در سرور مجازی خود ندارید، می‌توانید به این مقاله، مراجعه کنید).
    • Apache (در صورتی که آپاچی روی سرورتان نصب نیست، در ابتدا باید آن را نصب کنید).

    همچنین برای درک کامل مقاله، توصیه می‌شود در ابتدا، به مطالعه و بررسی مقاله‌های زیر، بپردازید:

    ۵ مرحله برای پیکربندی 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؛ کدام را انتخاب کنیم؟

    ســــــــــــــــــــــال‌هاست که هستیم

    ۶ سال در کنار شما تجربه جمع کردیم. تازه در ابتدای مسیر هستیم، مسیر ساخت آینده.

    sixth

    جمع‌مـــــــــــان، جمع است

    بیش از ۴۰ هزار توسعه‌دهنده و صاحبان کسب و کار در جمع ما هستند. جای شما خالی‌ست...

    usersnumberusers

    خدمات رایگان لیارا

    ۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان

    ۲.۵ گیگابایت Object Storage سازگار با پروتکل S3 با دیسک‌های SSD به‌صورت رایگان دریافت کنید.

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

    دیتابیس‌های MariaDB، PostgreSQL و Redis را فقط با یک کلیک و به‌صورت رایگان تهیه کنید.

    سرویس DNS رایگانسرویس DNS رایگان

    به سادگی دامنه‌تان را اضافه کنید و به صورت رایگان رکورد‌های آن را مدیریت کنید.

    ۱۰۰ هزار تومان اعتبار اولیه۱۰۰ هزار تومان اعتبار اولیه

    بعد از ثبت نام در لیارا مبلغ ۱۰۰ هزار تومان اعتبار هدیه دریافت می‌کنید که با توجه به ساعتی بودن هزینه سرویس‌ها، می‌توانید تمامی خدمات پولی را برای چندین هفته رایگان استفاده کنید.

    ارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماهارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماه

    در سرویس ایمیل لیارا شما می‌توانید تا ۱۰۰ ایمیل رایگان در هر ماه ارسال کنید. (به‌همراه دسترسی SMTP)

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

    تفاوتی ندارد برای وبسایت خود از Node استفاده می‌کنید یا Laravel و Django، در لیارا می‌توانید به صورت کاملا رایگان آن را میزبانی کنید.

    همراه شما هستیم

    در خصوص سفارش یا استفاده از سرویس‌ها سوالی دارید؟
    تلفن واحد فروش:
    ۰۲۵-۳۳۵۵۷۶۱۹ (روزهای کاری ۹ الی ۱۷)
    call
    تلفن واحد فروش: ۳۳۵۵۷۶۱۹-۰۲۵ (روزهای کاری ۹ الی ۱۷)