使用CentOS 8/Rhel 8上的Mod_ssl&mod_http2安装apache

时间:2020-02-23 14:39:13  来源:igfitidea点击:

问题:如何在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不再是用于设置环境变量的支持界面 httpdServiceHTTP/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 -connectcommand.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