برای نصب Apache روی اوبونتو بسته apache2 را با apt نصب کنید، پورتهای ۸۰ و ۴۴۳ را در فایروال باز کنید و برای هر دامنه یک Virtual Host بسازید. Virtual Host فایل کانفیگی است که مشخص میکند درخواستهای هر دامنه از کدام پوشه سرو شود. فعال کردن آن با a2ensite و اعمال تغییر با reload انجام میشود، بدون اینکه اتصالهای جاری قطع شوند.
دستورها برای Ubuntu 22.04 و 24.04 نوشته شدهاند. اگر Nginx را ترجیح میدهید، نصب Nginx روی اوبونتو همین مسیر را برای آن توضیح داده است. مقایسه ویژگیهای دو وبسرور و تنظیمات پیشرفتهتر در وب سرور لینوکس: نصب و پیکربندی پیشرفته آمده است.
مرحله اول: نصب Apache روی اوبونتو
sudo apt update
sudo apt install apache2بعد از نصب، سرویس خودکار روشن میشود. وضعیت و نسخه را ببینید:
systemctl status apache2
apache2 -vاگر Nginx یا سرویس دیگری پورت ۸۰ را گرفته باشد، Apache بالا نمیآید. با sudo ss -ltnp | grep ':80' ببینید چه چیزی روی آن گوش میدهد.
مرحله دوم: باز کردن پورتها بعد از نصب Apache روی اوبونتو
اگر UFW فعال است، پروفایل Apache Full هر دو پورت را باز میکند. پیش از فعال کردن فایروال، پورت SSH را مجاز کنید تا از سرور بیرون نمانید:
sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'
sudo ufw statusحالا آدرس IP سرور را در مرورگر باز کنید. صفحه Apache2 Ubuntu Default Page یعنی نصب درست انجام شده است.
ساختار فایلهای Apache در اوبونتو
| مسیر | کاربرد |
|---|---|
/etc/apache2/apache2.conf | کانفیگ اصلی |
/etc/apache2/sites-available/ | فایل Virtual Host هر سایت |
/etc/apache2/sites-enabled/ | لینک نمادین سایتهای فعال |
/etc/apache2/mods-available/ و mods-enabled/ | ماژولهای موجود و فعال |
/var/www/ | محل پیشنهادی فایلهای سایت |
/var/log/apache2/ | لاگ دسترسی و خطا |
در Ubuntu برای فعال و غیرفعال کردن سایتها و ماژولها ابزارهای a2ensite، a2dissite، a2enmod و a2dismod وجود دارد و لازم نیست لینکها را دستی بسازید.
مرحله سوم: ساخت Virtual Host
فرض کنید دامنه example.com است. پوشه سایت و یک صفحه آزمایشی بسازید:
sudo mkdir -p /var/www/example.com/public_html
echo '<h1>example.com works</h1>' | sudo tee /var/www/example.com/public_html/index.html
sudo chown -R www-data:www-data /var/www/example.comفایل /etc/apache2/sites-available/example.com.conf را با این محتوا بسازید:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
<Directory /var/www/example.com/public_html>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>گزینه AllowOverride All اجازه میدهد فایل .htaccess کار کند، که وردپرس و بسیاری از برنامهها به آن نیاز دارند. گزینه -Indexes نمایش فهرست فایلها را در پوشههای بدون index میبندد. حالا سایت را فعال و کانفیگ را تست کنید:
sudo a2ensite example.com.conf
sudo apache2ctl configtest
sudo systemctl reload apache2دستور configtest باید Syntax OK بنویسد. اگر هشدار درباره ServerName دیدید، یک خط ServerName سراسری در /etc/apache2/conf-available/ بنویسید و با a2enconf فعالش کنید. سایت پیشفرض را هم اگر لازم ندارید با sudo a2dissite 000-default.conf غیرفعال کنید.
ماژولهای رایج
ماژول rewrite برای لینکهای یکتای وردپرس و بیشتر برنامههای PHP لازم است، و headers برای افزودن هدرهای امنیتی:
sudo a2enmod rewrite headers
sudo systemctl restart apache2فهرست ماژولهای فعال را apache2ctl -M نشان میدهد. ماژولهایی را که نیاز ندارید فعال نگذارید، چون هر ماژول مصرف حافظه و سطح حمله را بیشتر میکند.
اجرای PHP با Apache
دو روش رایج وجود دارد. در روش قدیمی ماژول mod_php داخل Apache اجرا میشود. در روش جدیدتر، Apache با MPM event کار میکند و درخواستهای PHP را به PHP-FPM میفرستد که مصرف حافظه کمتر و کنترل بهتری روی منابع دارد:
sudo apt install php-fpm libapache2-mod-fcgid
sudo a2enmod proxy_fcgi setenvif
sudo a2enmod mpm_event
sudo a2enconf php8.3-fpm
sudo systemctl restart apache2شماره نسخه را با نسخه PHP نصبشده تطبیق دهید؛ php -v آن را نشان میدهد. اگر قبلاً mod_php نصب بوده، باید ماژول php و mpm_prefork را غیرفعال کنید تا با MPM event تداخل نداشته باشند.
فعال کردن HTTPS
گواهی رایگان Let’s Encrypt با Certbot گرفته و در Virtual Host تنظیم میشود:
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d example.com -d www.example.comCertbot بلوک 443 را میسازد و تمدید خودکار را فعال میکند. مراحل کامل و حالتهای دیگر در نصب SSL رایگان آمده است.
دسترسی فایلها و مالکیت
فایلهای سایت باید برای کاربری که Apache با آن اجرا میشود، یعنی www-data، خواندنی باشند. مقدار معمول 644 برای فایلها و 755 برای پوشههاست:
sudo find /var/www/example.com -type d -exec chmod 755 {} \;
sudo find /var/www/example.com -type f -exec chmod 644 {} \;پوشههایی که برنامه در آنها مینویسد، مثل uploads، باید برای www-data قابل نوشتن باشند. سایت یا پوشهای را با دسترسی 777 رها نکنید.
بررسی لاگها
sudo tail -f /var/log/apache2/example.com-error.logلاگ خطا اولین جایی است که برای خطاهایی مثل 403 و 500 باید نگاه کنید. عیبیابی خطای 500 در خطای 500 Internal Server Error آمده است.
خطاهای رایج
| نشانه | علت و راه حل |
|---|---|
Address already in use | پورت ۸۰ یا ۴۴۳ را سرویس دیگری گرفته |
| 403 Forbidden | دسترسی پوشه، Require all granted نبودن یا نبودن فایل index |
| صفحه پیشفرض Apache باز میشود | Virtual Host فعال نشده یا ServerName با دامنه نمیخواند |
فایل .htaccess اثر ندارد | AllowOverride روی None است یا ماژول rewrite فعال نیست |
AH00558: Could not reliably determine the server's fully qualified domain name | یک ServerName سراسری تعریف کنید |
| تغییر کانفیگ اعمال نمیشود | reload یا restart انجام نشده یا configtest خطا داده است |
سوالات متداول
فرق apache2 و httpd چیست؟
هر دو همان Apache HTTP Server هستند. نام بسته و سرویس در Debian و Ubuntu apache2 و در AlmaLinux و Rocky httpd است و مسیر فایلها هم فرق میکند.
برای وردپرس Apache بهتر است یا Nginx؟
هر دو با PHP-FPM خوب کار میکنند. Apache از .htaccess پشتیبانی میکند که بیشتر افزونهها و ریدایرکتهای وردپرس به آن تکیه دارند. در Nginx همین قوانین باید در کانفیگ نوشته شوند.
reload یا restart؟
reload کانفیگ جدید را بدون قطع اتصالهای جاری میخواند و بعد از apache2ctl configtest موفق، معمولاً کافی است. restart برای نصب یا فعال کردن ماژول جدید لازم است.
چطور چند سایت را روی یک Apache اجرا کنم؟
برای هر دامنه یک Virtual Host جدا با ServerName خودش بسازید و با a2ensite فعالش کنید. Apache بر اساس هدر Host درخواست، بلوک مناسب را انتخاب میکند.





