Вопросы:
- Как установить Apache на RHEL 8 ?, как установить mod_ssl на RHEL 8 ?
- Как установить mod_http2 на RHEL 8 ?.
В этом руководстве будет рассказано, как установить веб-сервер Apache с mod_ssl & mod_http2.
Apache – это веб-сервер с открытым исходным кодом, разработанный Apache Software Foundation.
Веб-сервер (HTTP-сервер) – это сетевая служба, используемая для передачи контента клиенту через Интернет по гипертекстовому транспортному протоколу (HTTP).
В Red Hat Enterprise 8 (RHEL 8) HTTP-сервер Apache обновлен до версии 2.4.33 со следующими новыми функциями.
- Предварительно сконфигурированный модуль мультиобработки (MPM)
- Минимальные UID и GID, разрешенные для пользователей с помощью suexec, теперь равны 1000 и 500 соответственно (RHEL 7 httpd использовал 100 и 100).
- /etc/sysconfig/httpd больше не поддерживается для настройки переменных среды для службы httpd
- HTTP / 2 теперь поддерживается через пакет mod_http2.
- Добавлены новые модули – mod_proxy_uswsgi, mod_proxy_hcheck, mod_proxy_fdpass, mod_cache_socache и mod_md.
- Новый подпакет httpd-filesystem владеющий каталогами.
- Новый httpd-init.service заменяет %post script для создания самоподписанной пары ключей с mod_ssl.
- Модуль mod_auth_kerb был заменен модулем mod_auth_gssapi
УстановкаApache на RHEL 8
Пакет веб-сервера Apache в RHEL 8 называется httpd.
Этот пакет и его инструменты распространяются через репозиторий Application Stream.
Установите модуль httpd на RHEL 8 с помощью команды.
$ sudo yum install @httpd Updating Subscription Management repositories. Updating Subscription Management repositories. Last metadata expiration check: 0:43:01 ago on Sat 29 Dec 2018 09:52:44 AM EAT. Dependencies resolved. Package Arch Version Repository Size Installing group/module packages: httpd x86_64 2.4.35-6.el8+2089+57a79027 rhel-8-for-x86_64-appstream-beta-rpms 1.4 M httpd-filesystem noarch 2.4.35-6.el8+2089+57a79027 rhel-8-for-x86_64-appstream-beta-rpms 32 k httpd-tools x86_64 2.4.35-6.el8+2089+57a79027 rhel-8-for-x86_64-appstream-beta-rpms 99 k mod_ssl x86_64 1:2.4.35-6.el8+2089+57a79027 rhel-8-for-x86_64-appstream-beta-rpms 127 k mod_http2 x86_64 1.11.3-1.el8+2087+db8dc917 rhel-8-for-x86_64-appstream-beta-rpms 156 k Installing dependencies: apr x86_64 1.6.3-8.el8 rhel-8-for-x86_64-appstream-beta-rpms 125 k apr-util x86_64 1.6.1-6.el8 rhel-8-for-x86_64-appstream-beta-rpms 105 k redhat-logos-httpd noarch 80.5-1.el8 rhel-8-for-x86_64-baseos-beta-rpms 24 k Installing weak dependencies: apr-util-bdb x86_64 1.6.1-6.el8 rhel-8-for-x86_64-appstream-beta-rpms 25 k apr-util-openssl x86_64 1.6.1-6.el8 rhel-8-for-x86_64-appstream-beta-rpms 27 k Installing module profiles: httpd/default Enabling module streams: httpd 2.4 Transaction Summary Install 10 Packages Total download size: 2.1 M Installed size: 5.7 M Is this ok [y/N]: y
Это установит следующие пакеты httpd.
- httpd: HTTP-сервер Apache.
- httpd-filesystem: содержит базовую структуру каталогов для HTTP-сервера Apache, включая правильные права для каталогов.
- httpd-tools: содержит инструменты, которые можно использовать с HTTP-сервером Apache
- mod_http2: модуль Apache httpd, который реализует протокол HTTP2 (h2 + h2c) поверх libnghttp2 для серверов httpd 2.4.
- mod_ssl: обеспечивает надежную криптографию для веб-сервера Apache по протоколам Secure Sockets Layer (SSL) и Transport Layer Security (TLS).
- и другие необходимые зависимости – apr*
Служба httpd по умолчанию считывает конфигурацию из следующих каталогов и файлов:
- /etc/httpd/conf/httpd.conf – это основной файл конфигурации httpd.
- /etc/httpd/conf.d/ – это вспомогательный каталог для файлов конфигурации, которые включены в основной файл конфигурации. Вы можете разместить конфигурационные файлы, такие как VirtualHosts, в этом каталоге.
- /etc/httpd/conf.modules.d/ – содержит файлы конфигурации, которые загружают динамические модули, упакованные в RHEL. Файлы конфигурации в этом каталоге обрабатываются в первую очередь.
- /usr/lib64/httpd/modules/ – каталог с модулями httpd.
Управление сервисом httpd на RHEL 8
В этом разделе описывается, как управлять состояниями службы Apache HTTP – запускать, останавливать, перезапускать и проверять текущее состояние.
Запуск службы httpd:
sudo systemctl start httpd.service
Используйте приведенную ниже команду для включения автоматического запуска службы httpd во время загрузки:
sudo systemctl enable httpd.service
Для запуска и включения службы во время загрузки можно использовать одну приведенную ниже команду.
sudo systemctl enable --now httpd.service
Убедитесь, что служба настроена на запуск при загрузке.
$ sudo systemctl is-enabled httpd.service enabled
Остановка службы httpd
Чтобы остановить запущенную службу httpd, введите следующую команду:
sudo systemctl stop httpd.service
Чтобы предотвратить автоматический запуск службы во время загрузки, введите:
sudo systemctl disable httpd.service
Перезапуск службы httpd
Существует два варианта перезапуска службы httpd.
1. Остановите запущенную службу httpd и сразу же запустите ее снова.
Полезно после установки или удаления динамически загружаемого модуля, такого как PHP.
sudo systemctl restart httpd.service
2. Перезагрузите конфигурацию, не затрагивая активные запросы – работающая служба httpd только перезагрузит свой файл конфигурации, и все обрабатываемые в настоящее время запросы продолжат использовать старую конфигурацию.
sudo systemctl reload httpd.service
Чтобы проверить конфигурацию на наличие возможных ошибок, введите:
sudo apachectl configtest Syntax OK
Если в файлах конфигурации нет ошибок, вы должны получить синтаксис ОК.
Загрузка модуля SSL
Мы установили модуль mod_ssl, но вам необходимо загрузить модуль с директивой LoadModule, прежде чем вы сможете его использовать.
Чтобы загрузить DSO mod_ssl, добавьте строку ниже в конце файла конфигурации httpd.conf.
LoadModule ssl_module modules/mod_ssl.so
Перезапустите веб-сервер после загрузки модуля, чтобы перезагрузить конфигурацию.
sudo systemctl restart httpd
Файл конфигурации SSL по умолчанию /etc/httpd/conf.d/ssl.conf, например, вы можете отключить SSL версии 2 и SSL версии 3, изменив в этом файле директиву SSLProtocol.
SSLProtocol all -SSLv2 -SSLv3
Строка ниже отключит все протоколы SSL и TLS, кроме TLS 1 и выше.
SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2
Перезапустите демон Apache после внесения изменений.
sudo systemctl restart httpd
Чтобы проверить, какие версии SSL и TLS включены или отключены, вы можете использовать openssl
openssl s_client -connect <hostname>:<port> -<protocol>
Протокол может быть -ssl2, -ssl3, -tls1, -tls1_1, -tls1_2 e.t.c
Смотрите пример ниже.
# Проверить, включен ли SSLv3 $ openssl s_client -connect localhost:443 -ssl3 # Проверить, включен ли TLSv1.2 $ openssl s_client -connect localhost:443 -tls1_2
Пример вывода:
# openssl s_client -connect localhost:443 -tls1_2
CONNECTED(00000004)
depth=1 C = US, O = Unspecified, OU = ca-4688871391028164607, CN = rhel8.local, emailAddress = root@rhel8.local
verify error:num=19:self signed certificate in certificate chain
---
Certificate chain
0 s:C = US, O = Unspecified, CN = rhel8.local, emailAddress = root@rhel8.local
i:C = US, O = Unspecified, OU = ca-4688871391028164607, CN = rhel8.local, emailAddress = root@rhel8.local
1 s:C = US, O = Unspecified, OU = ca-4688871391028164607, CN = rhel8.local, emailAddress = root@rhel8.local
i:C = US, O = Unspecified, OU = ca-4688871391028164607, CN = rhel8.local, emailAddress = root@rhel8.local
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIErTCCApWgAwIBAgIIfoNXRr0/654wDQYJKoZIhvcNAQELBQAwezELMAkGA1UE
BhMCVVMxFDASBgNVBAoMC1Vuc3BlY2lmaWVkMR8wHQYDVQQLDBZjYS00Njg4ODcx
MzkxMDI4MTY0NjA3MRQwEgYDVQQDDAtyaGVsOC5sb2NhbDEfMB0GCSqGSIb3DQEJ
ARYQcm9vdEByaGVsOC5sb2NhbDAeFw0xODEyMjkwNzQ3NDFaFw0yMDAxMDMwOTI3
NDFaMFoxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtVbnNwZWNpZmllZDEUMBIGA1UE
AwwLcmhlbDgubG9jYWwxHzAdBgkqhkiG9w0BCQEWEHJvb3RAcmhlbDgubG9jYWww
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCXG/tlwvg8jf7Aa+rBXt8
V0ZV5krqXnkF3N2xccKjJLKRY6psny0rdaf7qNF9fjNPTNmP6PdqSvpxvhG0gjoV
lo0PU79M7sq74esx8A+UdSqPkqDfnrszBthb+PYBj0yQu88/0aS6GIPWbeWF235Z
uRIAYdin92ZmcXqsafX1qGlErgZN+UrisrVPZFgM2rKWMnuIxOmSeqwdsrHGIlv2
lROipNxEosqqqBXAVS3VX7Q8yMaGT3GgU6Nf8TbT84lnMDsYj4bgtlh1Ry+ck8jA
muN3rujvgCsTWQ1v4s4m5/p/iq3aGFOyIq8z2qdCA24leYhSXpPrFqkKXIr7UkTt
AgMBAAGjVjBUMA4GA1UdDwEB/wQEAwIFoDAJBgNVHRMEAjAAMBYGA1UdEQQPMA2C
C3JoZWw4LmxvY2FsMB8GA1UdIwQYMBaAFOwi+L9TpxZTDY3TYF29uCq5mW7MMA0G
CSqGSIb3DQEBCwUAA4ICAQAWgBjsNHhcI9dAAs1cuhmox6j7EYS2nGDe+BVlMdtE
TVBbSfUV27L+9G3NF9XMOjrUmX67mBqEsGwLiyUaDSFS8JgcJ1zw0V2Q0k8PLgnB
uGKOwkKvPWGPtB2GGJCTBbp0WCByPNsufyIG8+7GHov0StG6s8nYUSSjHHQcZpx4
2BybuLmGt6GvSgN+TMPJl5mApPHNdpUrrf8DWyyP2yAgoB6/XSy3rafBP+1WE38C
s+iHgFoTH05iFtPtMVF1/oLVA4jDfU0T4thqoHFLNwAWYPts6dOgOwT9rZe8e0Ft
bXCd4PJ+3RZHB+JV+IPVF6nF+GVXxr0jT/Fu6+15dHVWbdZUWzscdSV8lae0vyhp
jQRgUdISqbVhmWt1ruRTgZ443fj6NgrFeht0X3pS1WnHyxMT3Aj6nAZnInlZoaX0
xNdPE31ZsgWn6yoFXVEWlVs50xZ+31V+2/LDLQiqVYMRoid1uRZxAp4X80AMUfqc
v4g3/ebLhLsdStCVT7YASrJ/a8fRNNFEJhHOlPaqVsaerBvKrviyjocEQsPzX2cK
oP1RlmDMUoDqFHUo8jIFsWAC2YKe0rsNTSwZTYUHZuc+FzRyKKmpsIrzFMNlgZ3h
evqQPJDRyyB+Nru6mxqSn6L36PbdfYkWOWEDmllnCTAATopYBtmegsYncFRNnEnB
Bg==
-----END CERTIFICATE-----
subject=C = US, O = Unspecified, CN = rhel8.local, emailAddress = root@rhel8.local
issuer=C = US, O = Unspecified, OU = ca-4688871391028164607, CN = rhel8.local, emailAddress = root@rhel8.local
.......
Директивы для настройки ключа SSL и сертификата:
SSLCertificateFile /etc/pki/tls/certs/server.crt SSLCertificateKeyFile /etc/pki/tls/private/server.key
Настройка брандмауэра
Разрешите порты 80 и 443, если у вас запущена служба firewalld.
$ sudo firewall-cmd --add-service={http,https} --permanent success $ sudo firewall-cmd --reload success $ firewall-cmd --list-services cockpit dhcpv6-client http https ssh
Вы можете узнать больше о работе с firewall-cmd
- Введение в команду firewalld и firewall-cmd в Linux
- Как исправить “firewall-cmd: command not found” ошибку в RHEL/CentOS 7
Включить поддержку HTTP / 2, загрузив модуль mod_http2
LoadModule http2_module modules/mod_http2.so
Также добавьте ниже в директиву Протоколов
Protocols h2 h2c http/1.1
Значение параметров директив Протоколов:
- h2 – указывает Apache на поддержку протокола HTTP / 2 по SSL / TLS
- h2c – указывает Apache на поддержку HTTP / 2 через TCP
- http / 1.1 – если клиент не принимает HTTP / 2, отправляет запрос через HTTP / 1.1
Перезапустите веб-сервер Apache, чтобы выполнить перезагрузку конфигурации.
sudo systemctl restart httpd
Настройка виртуальных хостов
HTTP-сервер Apache имеет встроенный виртуальный хостинг, который позволяет обслуживать информацию в зависимости от запрашиваемого IP-адреса, имени хоста или порта.
Поместите файлы конфигурации VirtualHost в каталог /etc/httpd/conf.d/.
Вот пример:
sudo vim /etc/httpd/conf.d/example.conf
С данными, аналогичными приведенным ниже.
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot "var/www/html/example"
ServerName itisgood.ru
ServerAlias www.itisgood.ru
ErrorLog "/var/log/httpd/example-error_log"
CustomLog "/var/log/httpd/example-access_log" common
</VirtualHost>
ServerName
должно быть действительным DNS-именем, назначенным серверу, на котором размещен сайт.
Перезапустите службу httpd, чтобы активировать вновь созданный виртуальный хост.
sudo systemctl restart httpd
Дополнительные теги:
Как реализовать HTTP / 2 в веб-сервере Apache HTTP
Как настроить Apache SSL на RHEL 8