Установка и настройка Apache2 на VPS
Apache2 или Nginx
Apache и Nginx это два самых популярных веб-сервера. Кратко:
| Apache2 | Nginx | |
|---|---|---|
| Архитектура | Процесс на каждый запрос | Асинхронный, event-driven |
| .htaccess | Да | Нет |
| Модули | Загружаются динамически | Компилируются при сборке |
| PHP | mod_php (встроенный) | Через php-fpm |
| RAM | Больше | Меньше |
| Статика | Хорошо | Отлично |
| Динамика | Отлично | Хорошо |
Apache лучше подходит, если вам нужен .htaccess (например для WordPress с кастомными правилами) или mod_rewrite. Nginx быстрее раздаёт статические файлы и ест меньше памяти.
Установка Apache2
apt update
apt install apache2 -y
Проверка
systemctl status apache2
Откройте IP сервера в браузере. Должна появиться стандартная страница Apache2.
Основные команды
systemctl start apache2 # Запуск
systemctl stop apache2 # Остановка
systemctl restart apache2 # Перезапуск
systemctl reload apache2 # Перезагрузка конфига
apachectl configtest # Проверка конфигурации
Настройка виртуального хоста
Создание директории сайта
mkdir -p /var/www/mysite.com/html
chown -R www-data:www-data /var/www/mysite.com
Создание конфигурации
nano /etc/apache2/sites-available/mysite.com.conf
<VirtualHost *:80>
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /var/www/mysite.com/html
<Directory /var/www/mysite.com/html>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/mysite-error.log
CustomLog ${APACHE_LOG_DIR}/mysite-access.log combined
</VirtualHost>
Активация сайта
a2ensite mysite.com.conf
a2dissite 000-default.conf
systemctl reload apache2
Установка PHP
Для WordPress, Laravel и других PHP-проектов:
apt install php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-zip -y
systemctl restart apache2
Проверка:
echo "<?php phpinfo(); ?>" > /var/www/mysite.com/html/info.php
Откройте http://ваш_ip/info.php в браузере. Не забудьте удалить этот файл потом.
Включение mod_rewrite
Нужен для WordPress, Laravel и любых проектов с "красивыми" URL:
a2enmod rewrite
systemctl restart apache2
Установка SSL с Let's Encrypt
apt install certbot python3-certbot-apache -y
certbot --apache -d mysite.com -d www.mysite.com
Certbot автоматически настроит HTTPS и редирект с HTTP.
Автопродление
certbot renew --dry-run
Настройка обратного прокси
Если нужно проксировать запросы к приложению на другом порту:
a2enmod proxy proxy_http
<VirtualHost *:80>
ServerName app.mysite.com
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>
systemctl restart apache2
Полезные модули
a2enmod headers # Управление HTTP-заголовками
a2enmod expires # Кэширование
a2enmod deflate # Сжатие gzip
a2enmod ssl # HTTPS
a2enmod rewrite # Перезапись URL
a2enmod proxy # Обратный прокси
Базовая безопасность
Добавьте в /etc/apache2/conf-available/security.conf:
# Скрыть версию Apache
ServerTokens Prod
ServerSignature Off
# Защита от clickjacking
Header always set X-Frame-Options SAMEORIGIN
# Защита от XSS
Header always set X-Content-Type-Options nosniff
a2enconf security
systemctl reload apache2
Полезные файлы и директории
| Путь | Описание |
|---|---|
/etc/apache2/apache2.conf |
Главный конфиг |
/etc/apache2/sites-available/ |
Конфиги сайтов |
/etc/apache2/sites-enabled/ |
Активные сайты |
/etc/apache2/mods-available/ |
Доступные модули |
/var/log/apache2/access.log |
Лог доступа |
/var/log/apache2/error.log |
Лог ошибок |
Оптимизация для VPS с малым RAM
Для серверов с 1-2 ГБ RAM замените prefork на event:
a2dismod mpm_prefork
a2enmod mpm_event
apt install php-fpm -y
a2enmod proxy_fcgi setenvif
a2enconf php8.3-fpm
systemctl restart apache2
Это значительно снизит потребление памяти.
Если вы ставите Apache только ради WordPress и не используете .htaccess, рассмотрите Nginx + php-fpm. Он быстрее и жрёт меньше памяти.