Как установить Apache HTTPD в CentOS Stream 9

Apache HTTP Server (httpd) — один из самых популярных и надежных доступных веб-серверов, известный своей гибкостью, производительностью и широким набором функций. Он широко используется для размещения веб-сайтов и веб-приложений. Настройка Apache на CentOS Stream 9 позволяет вам использовать его возможности для нужд вашего веб-хостинга. Кроме того, защита вашего веб-сайта бесплатным SSL-сертификатом от Let’s Encrypt гарантирует, что ваш сайт зашифрован и заслуживает доверия.

Чтобы установить Apache HTTP Server на CentOS Stream 9 и настроить SSL-сертификат Let’s Encrypt, следуйте инструкциям, описанным в этом руководстве. Это обеспечит вам безопасную и эффективную конфигурацию веб-сервера.

Обновление системы CentOS Stream перед установкой Apache

Прежде чем продолжить установку Apache на вашем компьютере CentOS Stream, мы должны убедиться, что наша система полностью обновлена. Это больше, чем просто мера предосторожности. Обновление вашей системы помогает предотвратить проблемы с совместимостью и значительно повышает ее стабильность, безопасность и производительность.

Чтобы запустить обновление, выполните следующую команду в вашем терминале:

sudo dnf upgrade --refresh

Эта команда запускает установку последних обновлений ПО вашей системы и исправлений безопасности. Необходимо полностью завершить процесс обновления, прежде чем переходить к установке Apache. Это гарантирует, что ваша система настроена и подготовлена для запуска Apache без каких-либо проблем с совместимостью.

Установите Apache HTTPD с помощью команды DNF

Второй шаг — установить Apache, или HTTPD, в вашу систему CentOS Stream. Этот процесс выполняется благодаря менеджеру пакетов DNF. 

Начните установку Apache (HTTPD), выполнив следующую команду в вашем терминале:

sudo dnf install httpd

Эта команда запускает механизм установки, извлекает и устанавливает все необходимые компоненты, позволяющие запускать Apache (HTTPD) в вашей системе. Процесс должен занять несколько минут. После этого Apache (HTTPD) будет полностью установлен и готов к использованию.

Активация и настройка Apache HTTPD для запуска при загрузке системы

После успешной установки Apache (HTTPD) в вашей системе CentOS Stream следующим ключевым действием является активация службы и настройка ее автоматического запуска при загрузке системы. 

Если служба Apache (HTTPD) не активна или настроена на запуск по умолчанию, используйте эти команды в вашем терминале, чтобы запустить службу и убедиться, что она запускается при загрузке системы:

sudo systemctl start httpd
sudo systemctl enable httpd

Первая команда, sudo systemctl start httpd, запускает службу Apache (HTTPD), тогда как вторая команда, sudo systemctl enable httpd, настраивает службу на автоматический запуск при загрузке системы. Используя эти две команды, вы гарантируете, что Apache (HTTPD) постоянно доступен и активен при каждом включении вашей системы.

В качестве альтернативы вы можете объединить два предыдущих шага в одну команду:

sudo systemctl enable httpd --now

Опция –now в команде sudo systemctl enable httpd —now одновременно запускает службу Apache (HTTPD) и настраивает ее на автоматический запуск при загрузке системы. Т.е. одна команда объединяет две отдельные команды из предыдущих шагов, делая процесс более упрощенным.

Проверка состояния службы Apache HTTPD

Наконец, мы должны проверить функционирование Apache (HTTPD), используя команду systemctl:

systemctl status httpd
Пример состояния systemctl OK для Apache в CentOS Stream
Пример состояния systemctl OK для Apache в CentOS Stream

Эта команда предоставляет вам информацию о состоянии службы Apache (HTTPD) в режиме реального времени, включая любые ошибки или сообщения, которые могли бы возникнуть. 
Изучив состояние службы, вы можете подтвердить, что Apache (HTTPD) работает без сбоев.

Настройка правил брандмауэра

После установки Apache (HTTPD) на CentOS Stream вы можете заметить, что брандмауэр не включает предварительно настроенные правила для стандартных портов 80 и 443. Вы должны настроить эти правила брандмауэра, прежде чем двигаться дальше, чтобы повысить безопасность вашего веб-приложения.

Установите правила брандмауэра с помощью firewall-cmd tool, утилиты управления брандмауэром CentOS Stream. Правила, которые вам нужно настроить, будут отличаться в зависимости от портов, которые вы собираетесь использовать. Однако мы перечислим все важные параметры в следующих шагах.

Открытие портов 80 и 443

Мы запустим первые две команды, чтобы открыть порты 80 и 443. Эти порты обрабатывают входящий HTTP и HTTPS трафик соответственно.

Чтобы открыть порт 80 или HTTP, выполните следующую команду:

sudo firewall-cmd --permanent --add-port=80/tcp

Далее откройте порт 443, или HTTPS, с помощью такой команды:

sudo firewall-cmd --permanent --add-port=443/tcp

Проверьте изменения брандмауэра

После указания портов для открытия мы должны дать указание брандмауэру реализовать эти изменения. Сделайте это, перезагрузив правила брандмауэра с помощью команды:

sudo firewall-cmd --reload

Понимание последствий

Крайне важно иметь четкое представление о последствиях для безопасности, связанных с открытием портов в вашей системе. Выборочно открывая только необходимые порты, вы повышаете защиту своего веб-приложения от несанкционированного доступа и потенциальных угроз безопасности. Важно правильно настроить правила брандмауэра для вашей установки Apache (HTTPD) в CentOS Stream.

Проверка доступа Apache HTTPD

После настройки Firewalld убедитесь, что вы можете получить доступ к целевой странице Apache (HTTPD) через свой веб-браузер. Запустите свой любимый веб-браузер и перейдите к либо http://localhost, либо http://your_server_ip.

Для доступа через IP вашего сервера:

http://your_server_ip

В качестве альтернативы можно получить доступ через localhost:

http://localhost

Когда вы все точно настроите, вас встретит целевая страница Apache (HTTPD) по умолчанию. На этой странице отображается сообщение, подтверждающее, что сервер работает должным образом. Страница будет иметь такой вид:

Пример тестовой страницы HTTP-сервера в CentOS Stream для Apache

Создание и настройка виртуального хостинга

В этом разделе будет рассмотрен практический аспект создания виртуального хостинга с использованием Apache (HTTPD), гибкого веб-сервера, известного своей способностью размещать несколько доменов на одном сервере. А далее мы покажем, как создать виртуальный хост для домена, представленного как “example-domain.com”. Естественно, вы замените этот пример домена своим конкретным доменным именем.

Создание виртуальных хостов облегчает независимое управление конфигурациями для каждого домена. Это обеспечивает контроль над различными аспектами среды вашего веб-сервера, включая безопасность, производительность и пользовательские настройки. Это может оказаться особенно полезным, если вы хотите разместить несколько веб-сайтов на одном сервере или поддерживать отдельные настройки для разных разделов вашего веб-сайта. С Apache (HTTPD) вы можете без особых усилий создавать виртуальные хосты, соответствующие этим требованиям.

Создание и настройка каталогов

Для начала настройки вашего виртуального хостинга необходимо создать новый каталог, который служит корневой папкой для вашего виртуального хостинга. Имя этого каталога обычно совпадает с именем вашего домена.

Например, если ваше доменное имя “example.com”, вы должны создать новый каталог с помощью команды:

sudo mkdir /var/www/example.com

Эта команда требует замены “example.com” на ваше доменное имя. Таким образом, в каталоге будут размещены файлы, связанные с вашими виртуальными хостами, включая HTML-файлы, изображения, скрипты и другие ресурсы.

Для разрешения доступа Apache (HTTPD) к новому каталогу может потребоваться соответствующее владение и разрешения. Установить всё это поможет следующая команда:

sudo chown -R apache:apache /var/www/example.com
sudo chmod -R 755 /var/www/example.com

После установки нового каталога мы можем настроить ваш виртуальный хост.

Создание файла index.html

Создать файл index.html для вашего виртуального хостинга поможет текстовый редактор. В нашем руководстве мы будем использовать текстовый редактор nano, хотя вы можете выбрать любой другой текстовый редактор, который вам больше нравится.

Выполните следующую команду, чтобы создать файл index.html :

sudo nano /var/www/example.com/index.html

В текстовом редакторе начните создавать содержимое для вашего файла index.html. Этот файл обычно служит первой точкой соприкосновения пользователя и вашего веб-сайта.

Вот простой пример:

<html>
  <head>
    <title>Example Domain</title>
  </head>
  <body>
    <h1>Welcome to Example Domain</h1>
    <p>This is a sample page for the domain example.com.</p>
  </body>
</html>
Пример HTML страницы домена в CentOS Stream

После завершения работы над содержимым файла index.html сохраните файл и закройте текстовый редактор. В случае с nano это можно сделать, нажав Ctrl + X, Y и Enter.

Настройка каталогов виртуальных хостов

Правильная настройка каталогов для веб-сервера Apache гарантирует бесперебойную и упорядоченную работу. В частности, используются каталоги «sites-available» и «sites-enabled». Эта конфигурация аналогична той, что используется в Nginx, и способствует упорядоченной и доступной настройке.

Чтобы создать эти каталоги, используйте следующую команду:

sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled

Затем укажите Apache искать файлы виртуальных хостов в каталоге «/etc/httpd/sites-available»:

sudo nano /etc/httpd/conf/httpd.conf

В открытом файле конфигурации добавьте в конец строку «IncludeOptional sites-enabled/*.conf». Эта строка указывает Apache на необходимость включить все файлы конфигурации виртуальных хостов в каталоге «sites-enabled».

IncludeOptional sites-enabled/*.conf

При желании вы можете закомментировать «IncludeOptional conf.d/*.conf», отключив папку по умолчанию, в которой Apache ищет файлы виртуальных хостов. Это поможет избежать возможных ошибок.

Пример:

#IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf
Пример настройки включения каталогов для Apache в CentOS Stream

Чтобы сохранить файл и выйти, используйте комбинацию клавиш CTRL + O, за которой следует комбинация CTRL + X.

Создание файла конфигурации виртуального хоста

Далее, используя ваш текстовый редактор, мы создадим файл конфигурации виртуального хоста по адресу /etc/httpd/sites-available/example.com.conf.

sudo nano /etc/httpd/sites-available/example.com.conf

Заполните информацию в следующем блоке конфигурации именем вашего сервера, ServerAlias и корневым каталогом документа, прежде чем копировать ее в файл конфигурации виртуального хоста, расположенный по адресу /etc/httpd/sites-available/example.com.conf.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName example_domain
    ServerAlias www.example_domain
    DocumentRoot /var/www/example.com/
</VirtualHost>

Настройте директивы сервера в соответствии с вашими конкретными требованиями.

Шаг 5: Изменение прав доступа

Чтобы предоставить общий доступ к вашему серверу, измените права доступа для службы Apache в файле конфигурации /etc/httpd/conf/httpd.conf. Конфигурация по умолчанию запрещает доступ. Если вы пренебрежете этим шагом, вы можете столкнуться с ошибками HTTP 403, при попытке доступа к вашему веб-сайту.

sudo nano /etc/httpd/conf/httpd.conf

Добавьте следующий блок в свой файл, убедившись, что вы настроили корневой каталог так, чтобы он соответствовал вашему собственному.

<Directory /var/www/example.com/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Пример настройки для разрешения виртуального хостинга в CentOS Stream в Apache

Чтобы сохранить эти изменения, используйте комбинацию клавиш CTRL + O и выйдите из текстового редактора с помощью CTRL + X.

Шаг 6: Включение виртуального хоста для Apache в CentOS Stream

Чтобы настроить виртуальный хост, вы должны активировать его в качестве последнего шага. Создайте символическую ссылку на каталог с включенными сайтами, используя приведенную ниже команду:

sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/

Вам необходимо перезапустить службу Apache, чтобы завершить процесс активации.

sudo systemctl restart httpd

После перезапуска службы Apache откройте свой веб-браузер и перейдите к “HTTP://example_domain.” Если вы не регистрировали домен, тогда вы можете получить доступ к своему веб-сайту, используя IP-адрес (локальный или удаленный). Если вы все настроили правильно, целевая страница, созданная вами в файле index.html, поприветствует вас.

Тестовый индекс, работающий на Apache VirtualHost в CentOS Stream

Дополнительные команды и советы

Безопасные каталоги и файлы

Настройка безопасных разрешений

Использование безопасных разрешений для файлов и каталогов в Apache на CentOS имеет большое значение. Часто предоставляются чрезмерные разрешения, например, полный общий доступ. Для предотвращения угроз безопасности рекомендуется ограничить разрешения. Для каталогов используйте chmod 755, а для файлов — chmod 644. Ниже приведены команды для установки этих разрешений. Помните, некоторым приложениям могут потребоваться другие разрешения, например, 777 для phpBB.

  • Для каталогов:
sudo find /var/www/example.com/ -type d -exec chmod 755 "{}" \;
  • Для файлов:
sudo find /var/www/example.com/ -type f -exec chmod 644 "{}" \;

Замените /var/www/example.com/ соответствующим путём к каталогу. Этот шаг не гарантирует полной безопасности, но значительно снижает риски, предотвращая публичный доступ к важным файлам.

Защита Apache с помощью Let’s Encrypt SSL

Установка SSL-сертификата Let’s Encrypt

Защита вашего сервера Apache с помощью SSL-сертификата необходима для безопасных подключений клиент-сервер. Let’s Encrypt предоставляет бесплатный автоматический SSL-сертификат. Сначала убедитесь, что включен репозиторий CRB и установлен репозиторий EPEL. Процесс установки в CentOS Stream 9 и 8 немного отличается .

Для CentOS Stream 9:
  • Включить CRB:
sudo dnf config-manager --set-enabled crb
  • Установить репозиторий EPEL:
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

Далее устанавливаем и привязываем mod_ssl :

sudo dnf install mod_ssl

Активируйте EPEL в вашем дистрибутиве CentOS Stream, а затем установите Snap.

sudo dnf install snapd -y

После установки обязательно включите Snap и сразу же включите запуск системы.

sudo systemctl enable snapd --now

Следующим шагом будет установка snap core, которая позаботится обо всех зависимостях, необходимых для запуска пакетов snap.

sudo snap install core

Создайте символическую ссылку для каталога snapd.

sudo ln -s /var/lib/snapd/snap /snap

Используйте следующую команду в терминале для установки пакета Certbot snap.

sudo snap install --classic certbot

Наконец, создайте еще одну символическую ссылку для пакета Certbot snap.

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Запуск Certbot для Apache

Выполните следующую команду в вашем терминале, чтобы сгенерировать ваш SSL-сертификат с помощью Certbot.

sudo certbot --dry-run --apache --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d www.example.com

Для новичков в Let’s Encrypt вы можете запросить дополнительную информацию об аббревиатуре в команде.

  • Опция “—dry-run” позволяет выполнить тестовый запуск процесса генерации сертификата без изменения системы. Эта опция полезна для тестирования.
  • Опция “—apache” предназначена для генерации сертификата для веб-сервера Apache.
  • Опция “—agree-tos” позволяет вам принять условия предоставления услуг от Let’s Encrypt, центра сертификации, который предоставляет SSL-сертификат.
  • Опция “—redirect” автоматически перенаправляет весь HTTP-трафик на HTTPS.
  • Опция “—hsts” включает режим строгой безопасности HTTP (HSTS). Эта функция безопасности помогает защититься от атак с понижением версии протокола и перехвата файлов cookie, разрешая браузерам доступ к вашему веб-сайту только по защищенному HTTPS-соединению.
  • Опция “—staple-ocsp” Включает или настраивает OCSP Stapling в серверной конфигурации, это механизм, который улучшает проверку статуса SSL/TLS сертификатов проверяет статус отзыва SSL-сертификата без обращения в центр сертификации.
  • Используйте опцию “—email”, чтобы указать адрес электронной почты, который вы хотите связать с сертификатом.
  • Опция “-d” указывает доменное имя, для которого вы будете генерировать сертификат. 
    В этом примере доменное имя — “www.example.com”.

В качестве альтернативы вы можете использовать следующую команду и следовать пошаговым подсказкам для более доступного взаимодействия:

sudo certbot certonly --apache

Выполняя команду с указанными параметрами, вы направляете certbot на создание SSL-сертификата для вашего домена “www.example.com ” при этом также включены необходимые функции безопасности, такие как принудительное перенаправление HTTPS 301, заголовок Strict-Transport-Security и OCSP. 

Важно отметить, что вы должны заменить адрес электронной почты в команде на свой собственный, а также обязательно заменить доменное имя “www.example.com” на желаемое доменное имя.

Настройка SSL на Apache

После получения SSL-сертификата настройте свой сервер Apache для его использования. Отредактируйте ssl.conf файл и добавьте следующие строки, заменив “example.com” на ваш домен.:

sudo nano /etc/httpd/conf.d/ssl.conf

В файле конфигурации добавьте следующие строки: замените “example.com” на ваше доменное имя.

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

Сохраните изменения и перезапустите Apache, чтобы конфигурация вступила в силу.

sudo systemctl restart httpd 

Эта настройка обеспечивает зашифрованную, безопасную связь между браузерами и вашим веб-сайтом.

Автоматизация обновления сертификата

Чтобы поддерживать SSL-сертификат в актуальном состоянии, настройте задание cron для автоматического обновления. Протестируйте процесс обновления с помощью пробного запуска:

sudo certbot renew --dry-run

Проверьте таймеры с помощью команды systemctl list-timers и убедитесь, что “snap.certbot.renew.timer” присутствует.

systemctl list-timers snap.certbot.renew.timer
Пример отображения таймеров для Certbot с помощью Snapcraft в CentOS Stream

Используйте команду “systemctl list-timers –all” для просмотра активных и неактивных таймеров в вашей системе. Эта команда покажет все таймеры, включая “snap.certbot.renew.timer”.  “Snap.certbot.renew.timer” обеспечивает автоматическую проверку и продление вашего сертификата до истечения срока действия. Таким образом, вы устраняете проблемы, связанные с процессом продления ssl сертификата.

systemctl list-timers --all

Управление Apache HTTPD

После успешной настройки Apache на вашем сервере, есть несколько важных моментов для эффективного управления, которые следует помнить.

Журналы сервера Apache

Журналы сервера Apache хранятся в каталоге /var/log/httpd/. Имена файлов по умолчанию для журналов (доступы и ошибки) access и error — access.log и error.log соответственно. Однако возможно изменение этих имен в файле конфигурации виртуального хоста.

Вот пример изменения журналов сервера Apache в файле конфигурации виртуального хоста.

<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot /var/www/example.com
    
    # Change access log to custom-access.log
    CustomLog /var/log/httpd/custom-access.log combined
    
    # Change error log to custom-error.log
    ErrorLog /var/log/httpd/custom-error.log
</VirtualHost>

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

Команды Apache

Вот некоторые из часто используемых команд при управлении Apache:

Остановить веб-сервер Apache:

sudo systemctl stop httpd

Запустите веб-сервер Apache:

sudo systemctl start httpd

Перезапустите веб-сервер Apache:

sudo systemctl restart httpd

Перезагрузите веб-сервер Apache:

sudo systemctl reload httpd

Отключите Apache при загрузке сервера:

sudo systemctl disable httpd

Включить Apache при загрузке сервера:

sudo systemctl enable httpd

Как обновить Apache HTTPD

Чтобы поддерживать Apache в актуальном состоянии, запустите команду, которую вы обычно используете для проверки актуальности вашей системы.

sudo dnf update --refresh

Важно создавать резервные копии или образы вашей системы перед выполнением каких-либо обновлений, поскольку иногда могут возникать ошибки. 

Следующая команда обновит все системные пакеты, включая Apache, и предложит вам выполнить обновление.

Как удалить Apache HTTPD

Чтобы удалить Apache из вашей системы, используйте следующую команду.

sudo systemctl disable httpd --now

Теперь используйте следующую команду, чтобы полностью удалить Apache.

sudo dnf remove httpd

Оставшиеся файлы (хвосты) могут сохраняться в главном каталоге /etc / httpd, поэтому давайте удалим эту папку.

sudo rm -R /etc/httpd/

Заключение

С успешно настроенными HTTP-сервером Apache и Let’s Encrypt в вашей системе CentOS Stream ваш веб-сайт будет надежным и безопасным. Регулярное обновление Apache и вашего SSL-сертификата Let’s Encrypt поможет поддерживать оптимальную безопасность и производительность.