Home » Установка веб-сервера Apache на последний CentOS
Установка веб-сервера Apache на последний CentOS

Установка веб-сервера 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 справится отлично.

Помни про безопасность, мониторинг и регулярные обновления. И не забывай делать бэкапы конфигурации перед экспериментами!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked