- Home »

Установка веб-сервера Apache на последний CentOS
Если ты занимаешься настройкой серверов, то наверняка знаешь, что Apache до сих пор остается одним из самых популярных веб-серверов в мире. Несмотря на то, что Nginx активно теснит его позиции, Apache по-прежнему держит около 35% рынка и особенно хорош для сложных конфигураций с модулями и htaccess-файлами. В этой статье я покажу, как правильно установить и настроить Apache на свежий CentOS — от базовой установки до production-ready конфигурации.
Мы разберем три ключевых момента: как работает Apache в экосистеме CentOS, как быстро развернуть его с нуля, и какие подводные камни тебя ждут в реальных проектах. Плюс поделюсь парой трюков, которые помогут автоматизировать процесс.
Как работает Apache в CentOS
Apache в CentOS работает как системный сервис через systemd. Основные файлы конфигурации лежат в /etc/httpd/
, логи в /var/log/httpd/
, а документы по умолчанию в /var/www/html/
. Важно понимать, что в CentOS Apache называется httpd
— это не ошибка, а историческая особенность.
Архитектура довольно прозрачная:
- Главный конфиг:
/etc/httpd/conf/httpd.conf
- Модульные конфиги:
/etc/httpd/conf.d/
- Модули:
/etc/httpd/conf.modules.d/
- SSL настройки:
/etc/httpd/conf.d/ssl.conf
Установка Apache на CentOS
Для начала нужен свежий CentOS. Если у тебя еще нет сервера, можешь взять VPS или выделенный сервер для более серьезных проектов.
Проверим версию системы и обновим пакеты:
cat /etc/redhat-release
sudo dnf update -y
Теперь устанавливаем Apache:
sudo dnf install httpd -y
sudo systemctl start httpd
sudo systemctl enable httpd
sudo systemctl status httpd
Открываем порты в firewall:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Проверяем, что все работает:
curl -I localhost
Если видишь HTTP/1.1 200 OK
и Server: Apache
— поздравляю, базовая установка готова!
Базовая конфигурация
Дефолтный конфиг Apache в CentOS довольно консервативный, но рабочий. Основные параметры, которые стоит настроить сразу:
sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.backup
sudo nano /etc/httpd/conf/httpd.conf
Ключевые директивы для изменения:
ServerTokens Prod
ServerSignature Off
ServerName your-domain.com:80
DirectoryIndex index.html index.php
Создаем простой виртуальный хост:
sudo nano /etc/httpd/conf.d/example.conf
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example
ErrorLog /var/log/httpd/example_error.log
CustomLog /var/log/httpd/example_access.log combined
</VirtualHost>
Создаем директорию и тестовый файл:
sudo mkdir -p /var/www/example
echo "<h1>Hello from Apache on CentOS!</h1>" | sudo tee /var/www/example/index.html
sudo chown -R apache:apache /var/www/example
sudo systemctl restart httpd
Установка SSL/TLS
Без SSL в 2024 году никуда. Ставим mod_ssl:
sudo dnf install mod_ssl -y
Для автоматических сертификатов от Let’s Encrypt ставим Certbot:
sudo dnf install epel-release -y
sudo dnf install certbot python3-certbot-apache -y
Получаем сертификат:
sudo certbot --apache -d example.com
Настраиваем автообновление:
sudo crontab -e
# Добавляем строку:
0 12 * * * /usr/bin/certbot renew --quiet
Полезные модули и настройки
Несколько модулей, которые стоит включить для production:
sudo dnf install httpd-devel -y
Включаем сжатие (mod_deflate):
sudo nano /etc/httpd/conf.d/deflate.conf
LoadModule deflate_module modules/mod_deflate.so
<Location />
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \
\.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
</Location>
Настраиваем кэширование:
sudo nano /etc/httpd/conf.d/expires.conf
LoadModule expires_module modules/mod_expires.so
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>
Мониторинг и логи
Настраиваем ротацию логов:
sudo nano /etc/logrotate.d/httpd
/var/log/httpd/*log {
daily
rotate 52
compress
delaycompress
missingok
notifempty
create 640 apache apache
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript
}
Полезные команды для мониторинга:
# Статус Apache
sudo systemctl status httpd
# Активные соединения
sudo netstat -tuln | grep :80
# Последние записи в логах
sudo tail -f /var/log/httpd/access_log
# Проверка конфигурации
sudo httpd -t
Сравнение с альтернативами
Параметр | Apache | Nginx | Комментарий |
---|---|---|---|
Потребление памяти | Высокое | Низкое | Nginx эффективнее для статики |
Модули | Богатая экосистема | Ограниченный набор | Apache побеждает в гибкости |
.htaccess | Полная поддержка | Нет | Критично для многих CMS |
Производительность | Хорошая | Отличная | Nginx лучше для высоких нагрузок |
Автоматизация и скрипты
Создаем скрипт для автоматической настройки виртуального хоста:
sudo nano /usr/local/bin/create-vhost.sh
#!/bin/bash
DOMAIN=$1
if [ -z "$DOMAIN" ]; then
echo "Usage: $0 domain.com"
exit 1
fi
mkdir -p /var/www/$DOMAIN
chown apache:apache /var/www/$DOMAIN
cat > /etc/httpd/conf.d/$DOMAIN.conf << EOF
<VirtualHost *:80>
ServerName $DOMAIN
DocumentRoot /var/www/$DOMAIN
ErrorLog /var/log/httpd/${DOMAIN}_error.log
CustomLog /var/log/httpd/${DOMAIN}_access.log combined
</VirtualHost>
EOF
systemctl reload httpd
echo "Virtual host for $DOMAIN created successfully"
sudo chmod +x /usr/local/bin/create-vhost.sh
Безопасность
Несколько важных настроек безопасности:
sudo nano /etc/httpd/conf.d/security.conf
# Скрываем версию Apache
ServerTokens Prod
ServerSignature Off
# Защита от clickjacking
Header always append X-Frame-Options SAMEORIGIN
# Запрещаем доступ к системным файлам
<Files ~ "^\.ht">
Require all denied
</Files>
# Отключаем трассировку
TraceEnable Off
# Ограничиваем методы HTTP
<LimitExcept GET POST>
deny from all
</LimitExcept>
Интеграция с другими сервисами
Apache отлично работает в связке с:
- PHP-FPM — для обработки PHP через FastCGI
- MariaDB/MySQL — классический LAMP стек
- Redis — для кэширования сессий
- Fail2ban — защита от брутфорса
Пример настройки с PHP-FPM:
sudo dnf install php php-fpm -y
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
Добавляем в конфиг виртуального хоста:
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/"
</FilesMatch>
Полезные ссылки
Официальные ресурсы:
Заключение
Apache на CentOS — это проверенное временем решение, которое отлично подходит для большинства веб-проектов. Да, он может быть не самым быстрым, но зато предельно гибкий и стабильный. Особенно хорош для проектов, где нужна поддержка .htaccess или специфические модули.
Используй Apache, если:
- Нужна максимальная совместимость с CMS
- Требуется гибкая настройка через .htaccess
- Планируешь использовать специфичные модули
- Работаешь с legacy-проектами
Для высоконагруженных проектов стоит рассмотреть Nginx или связку Nginx + Apache. Но для большинства задач чистый Apache справится отлично.
Помни про безопасность, мониторинг и регулярные обновления. И не забывай делать бэкапы конфигурации перед экспериментами!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.