使用CentOS 8/Rhel 8上的Mod_ssl&mod_http2安装apache
问题:如何在RHEL 8/CentOS 8中安装Apache 8?
,如何在RHEL 8/CentOS 8上安装Mod_ssl 8?
,如何在Rhel 8/CentOS 8上安装Mod_http2?
此帖子将讨论如何使用mod_ssl和mod_http2安装Apache Web服务器。
Apache是由Apache软件基础开发的开源Web服务器。
Web服务器(HTTP服务器)是用于通过超文本传输协议(HTTP)通过Web服务于客户端的内容的网络服务。
在Red Hat Enterprise 8(RHEL 8)中,Apache HTTP服务器已更新为2.4.33版,其中包含以下新功能.pre配置的多处理模块(MPM)Suexec用户允许的最小UID和GID分别为1000和500(RHEL 7 HTTPD使用100和100)。 /etc/sysconfig/httpd
不再是用于设置环境变量的支持界面 httpd
ServiceHTTP/2现在支持 mod_http2
添加。
添加了新模块 - mod_proxy_uswsgi,mod_proxy_hcheck,mod_proxy_fdpass,mod_cache_socache和mod_md.new子包 httpd-filesystem
拥有目录。
新闻 httpd-init.service
替换 %post script
创建自签名 mod_ssl
凯文 mod_auth_kerb
模块已被替换为 mod_auth_gssapi
模块
在RHEL 8/CentOS 8上安装Apache
RHEL 8中的Apache Web服务器包被称为 httpd
。
此包及其工具通过应用程序流存储库分发。
使用命令在RHEL 8上安装HTTPD模块。
$sudo yum install @httpd Updating Subscription Management repositories. Updating Subscription Management repositories. Last metadata expiration check: 0:43:01 ago on Sat 29 Dec 2016 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:apache http web服务器.httpd-filesystem:包含apache http服务器的基本目录布局,包括目录的正确权限.httpd-tools:包含可以与之使用的工具apache http servermod_http2:apache httpd模块在libnghttp2的顶部用于httpd 2.4 servers.mod_ssl的http2协议(h2 + h2c):通过安全套接字层(SSL)和传输层安全性为Apache Web服务器提供强大加密(TLS "协议"。
还有其他必需的依赖 - APR *
这 httpd
默认情况下,服务从以下位置读取配置./etc/httpd/conf/httpd.conf - 这是主httpd配置文件./etc/httpd/conf.d/ - 这是一个用于配置文件的辅助目录包含在主配置文件中。
我们可以在此目录中放置类似于VirtualHost的配置文件./etc/httpd/conf.modules.d/ - 包含加载Rhel包装的动态模块的配置文件。
首先处理此目录中的配置文件./usr/lib64/httpd/modules/ - 带httpd模块的目录。
管理RHEL 8/CentOS 8上的HTTPD服务
本节将介绍如何管理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
如果配置文件没有错误,则应该得到 Syntax OK
。
加载SSL模块
我们安装了 mod_ssl
模块,但我们必须加载模块 LoadModule
指令在我们可以使用之前。
加载加载mod_ssl dso,在结尾添加以下行 httpd.conf
配置文件。
LoadModule ssl_module modules/mod_ssl.so
请参阅下面的屏幕截图。
加载模块以重新加载配置后重新启动Web服务器。
sudo systemctl restart httpd
默认的SSL配置文件 /etc/httpd/conf.d/ssl.conf
,我们可以通过修改SSL版本2和SSL版本3来禁用SSL版本3 SSLProtocol
在此文件中指令。
SSLProtocol all -SSLv2 -SSLv3
除了TLS 1和UP之外,下面的线将禁用除了除了TLS 1之外的所有SSL和TLS协议
SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2
更改后重新启动Apache守护程序。
sudo systemctl restart httpd
要检查是否启用或者禁用了哪些版本的SSL和TL,我们可以使用 openssl s_client -connect
command.openssl s_client -connect hostname:port -protocol
openssl s_client -connect <hostname>:<port> -<protocol>
协议可以是 -ssl2, -ssl3,-tls1,-tls1_1,-tls1_2
等等
请参见下面的示例。
# Test if SSLv3 is enabled $openssl s_client -connect localhost:443 -ssl3 # Test if TLSv1.2 is enable $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 = Hyman@theitroad verify error:num=19:self signed certificate in certificate chain -- Certificate chain 0 s:C = US, O = Unspecified, CN = rhel8.local, emailAddress = Hyman@theitroad i:C = US, O = Unspecified, OU = ca-4688871391028164607, CN = rhel8.local, emailAddress = Hyman@theitroad 1 s:C = US, O = Unspecified, OU = ca-4688871391028164607, CN = rhel8.local, emailAddress = Hyman@theitroad i:C = US, O = Unspecified, OU = ca-4688871391028164607, CN = rhel8.local, emailAddress = Hyman@theitroad -- 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 = Hyman@theitroad issuer=C = US, O = Unspecified, OU = ca-4688871391028164607, CN = rhel8.local, emailAddress = Hyman@theitroad .......
配置SSL密钥和证书的指令是:
SSLCertificateFile /etc/pki/tls/certs/server.crt SSLCertificateKeyFile /etc/pki/tls/private/server.key
配置防火墙
如果我们有防火墙运行,请允许端口80和443.
$sudo firewall-cmd --add-service={http,https} --permanent success $sudo firewall-cmd --reload success $firewall-cmd --list-services cockpit dhcpv6-client http https ssh
我们可以阅读更多关于Firewalld的Riewalld更多信息。
加载http/2模块 - mod_http2
通过加载启用对HTTP/2的支持 mod_http2
模块
LoadModule http2_module modules/mod_http2.so
还将下面添加到协议指令中
Protocols h2 h2c http/1.1
协议指令参数的含义:H2 - 通过SSL/TLSH2C指示Apache支持HTTP/2协议 - 指示Apache通过TCPHTTP/1.1来支持HTTP/2 - 如果客户端不接受HTTP/2,则在HTTP/1.1上提供请求
重新启动Apache Web服务器以效果重新加载配置。
sudo systemctl restart httpd
ref apache模块mod_http2文档。
设置虚拟主机
Apache HTTP服务器的内置虚拟托管,允许基于所要求的IP地址,主机名或者端口提供服务。
将VirtualHost配置文件放其中 /etc/httpd/conf.d/
目录。
这是一个例子:
sudo vim /etc/httpd/conf.d/example.conf
数据与下面类似的数据。
<VirtualHost *:80> ServerAdmin Hyman@theitroad DocumentRoot "var/www/html/example" ServerName theitroad.com ServerAlias www.theitroad.com ErrorLog "/var/log/httpd/example-error_log" CustomLog "/var/log/httpd/example-access_log" common </VirtualHost>
ServerName必须是分配给托管站点的服务器的有效DNS名称。
重新启动httpd服务以激活新创建的虚拟主机。
sudo systemctl restart httpd