一、Apache的作用
在web被访问时通常使用<http://>的方式,<http://>是一种超文本传输协议。apache是提供这种传输协议的软件。
http:// 超文本传输协议提供软件有:
Apache、nginx、stgw、jfe、Tengine
二、Apache的安装
dnf install httpd.x86_64 -y #安装apache软件
三、Apache的启用
Apache的启用主要分为两步:1、永久开启httpd服务;2、允许http和https服务通过火墙
systemctl enable --now httpd #开启服务并设置开机启动
firewall-cmd --list-all #查看火墙信息
firewall-cmd --permanent --add-service=http #在火墙中永久开启http访问(明文)
firewall-cmd --permanent --add-service=https #在火墙中永久开启https访问(密文)
firewall-cmd --reload #重新载入火墙配置
四、Apache的基本信息
服务名称 | httpd |
配置文件 | /etc/httpd/conf/httpd.conf #主配置文件 /etc/httpd/conf.d/*.conf #子配置文件 |
默认发布目录 | /var/www/html |
默认发布文件 | index.html |
默认端口 | 80 #http 443 #https |
用户 | apache |
日志 | /etc/httpd/logs |
五、Apache的基本配置
更改Apache配置需要更改其配置文件,并在每次更改完成后重启<httpd>服务令其生效。
vim /etc/httpd/conf/httpd.conf #编辑httpd配置文件
systemctl restart httpd #重启httpd服务
实验一:Apache端口修改
第一步:测试默认端口
在配置文件中编辑好一个“index.html”文件,在其他主机的浏览器中可以通过浏览器访问:
http://172.25.254.151 #默认通过80端口访问
就会默认通过80端口访问发布目录下的“index.html”文件。
第二步:修改配置文件中的端口
在配置文件的第45行左右,更改<Listen>后的参数,默认为80,默认为80端口,我们这里改为8080端口。
注意:Apache的端口只能是80或者8080,如果需要更改为其他端口,就需要修改Selinux的设置
第三步:重启服务并更改火墙配置
配置文件更改完成后,需要重启服务以及在火墙中增加8080端口
第四步:测试新端口
http://172.25.254.151:8080 #指定端口访问
更改完端口后,其他主机访问这个主机的网站后,在IP最后加上端口号就可以正常访问了。
实验二:默认发布文件的修改
第一步:修改配置文件
在httpd配置文件的第166行左右,原本默认的是“index.html”文件,即其他主机通过浏览器访问本机的默认文件,添加上“test.html”文件后,会先访问“test.html”文件,如果第一个文件不存在,会访问第二个文件。
第二步:重启httpd服务
第三步:测试
test.html文件存在时:
test.html文件不存在时:
实验三:默认发布目录的更改
第一步:更改配置文件
第二步:重启httpd服务
第三步:测试
情况1:
新建指定目录,且目录下不存在任何文件。在其他主机通过浏览器访问时,会看到测试页
情况2:
在该目录下新建<index.html>文件,但是在客户机无法访问。
这是因为服务器的Selinux开启了,导致这个<index.html>文件的安全上下文不一致,所以此文件不能用于共享。所以接下来要改变这个目录的安全上下文,文件就可以通过远程来访问了。
改变目录及下属文件的安全上下文命令如下:
semanage fcontext -a -t httpd_sys_content_t '/www(/.*)?' #修改目录及下属文件的安全上下文
restorecon -RvvF /www #刷新该目录的安全上下文
情况3:
在Selinux开启的情况下,共享文件的安全上下文不一致就会导致远程主机无法访问。如果不想这么麻烦,直接关闭Selinux就可以。
六、Apache的访问控制
1、基于客户端IP的访问控制
(1)IP白名单(先读禁止,再读允许)
第一步:在httpd的配置文件中添加如下几行命令
第二步:测试
配置文件中是“禁止所有用户访问,但是允许50号主机访问”。在IP为<172.25.254.50>的主机上访问,访问被允许;而在另一台<172.25.254.150>的主机是被禁止的。
(2)IP黑名单(先读允许,再读禁止)
第一步:在httpd的配置文件中添加如下几行命令
第二步:测试
配置文件中是“允许所有用户访问,但是禁止50号主机访问”。在IP为<172.25.254.50>的主机上访问,访问被禁止;而在另一台<172.25.254.150>的主机是允许访问的。
2、基于用户认证的访问控制
第一步:编写用户认证文件
htpasswd -cm /etc/httpd/.htpasswd admin #编写用户admin的认证文件
在<etc/httpd/.passwd>中新建一个用户为admin的认证文件,我这里为了测试,创建了三个用户。
注意:第一次创建文件时参数为<-cm>,之后如果再往里边加的话参数为<-m>;如果再用<-cm>则会覆盖之前的认证文件。
第二步:更改配置文件
在配置文件中新增如下几行命令。其中方框框住的内容为二选一
第三步:测试
(1)允许通过的认证用户
重启httpd服务后,非允许用户,即使出现在认证名单里,也不能访问
只有出现在认证名单里的且允许访问的用户“admin”可以访问。
(2)允许所有用户通过
凡是出现在之前认证名单里的三个用户“admin、lee、westos”都可以通过认证;名单之外的人不能通过认证。
七、Apache的虚拟主机
第一步:实验准备
在150号机上创建两个虚拟主机的目录及默认发布文件。
第二步:编写<vshost.conf>配置文件
第三步:重启httpd服务
第四步:测试
在其他测试机中编写本地解析文件
然后在浏览器中输入域名就会访问相应的虚拟用户那里了。
八、Apache的语言支持
~~~~~~~~~~~~未完待续~~~~~~~~~
九、Apache的加密访问
1、https协议
第一步:安装https协议的软件
dnf search http #查找http需要的软件
dnf install mod_ssl -y #安装加密https软件
安装完成后会在</etc/httpd/conf.d/>目录下新增一个“ssl.conf”文件。
第二步:重启httpd服务
第三步:客户端测试
可以看到在客户端浏览器里,第一次访问需要获得证书认证。通过以下方式可以看到网站向其发送的证书文件。
第四步:生成证书
openssl req --newkey rsa:2048 \
-nodes -sha256 -keyout /etc/httpd/westos.org.key \
-x509 -days 365 -out /etc/httpd/westos.org.crt
--newkey | 生成新密钥 | -x509 | 证书格式 |
--nodes | 不需要依赖des | -days | 证书有效期 |
-sha256 | 256位加密方式 | -out | 要分发的证书(.crt) |
-keyout | 要分发的密钥(.key) |
生成证书的其他参数如下图所示:
第五步:更改配置文件
向使用“https“协议访问的客户端发放证书,需要更改<sshl.conf>配置文件
vim /etc/httpd/conf.d/sshl.conf #编辑https协议的配置文件
第六步:重启服务
第七步:重新测试
在客户端的浏览器界面查看网站证书,可以查到之前“生成证书”步骤中填写的认证信息
注意:重新测试之前需要先删除此网站已经存在本地的证书,否则不会发放新的证书
2、强制加密:
使用特定域名访问时无论是http还是https都会强制转换到https协议
第一步:创建虚拟用户目录及文件
mkdir /var/www/virtual/westos.org/login -p #创建虚拟用户目录
vim /var/www/virtual/westos.org/login/index.html #创建虚拟用户默认文件
第二步:编辑虚拟用户配置文件
默认用户访问通过80端口,当使用“login.westos.org”域名登录时,需要跳到https强制转换到通过443端口访问
第三步:设置测试客户端的解析文件
第四步:测试
在客户机中浏览器中输入域名,会自动跳转到https协议访问。
十、squid正向代理与反向代理
1、正向代理
第一步:安装squid
dnf install squid -y #安装代理缓存软件
第二步:更改代理机的squid的配置文件
第三步:更改代理机火墙配置
第四步:在测试机的浏览器中设置代理
第五步:测试
在测试机中无法连接百度,但是通过设置代理可以访问百度。
二、反向代理
设置中间代理服务器,其中50号机为客户机,151号机为区域服务器(有squid,无apache),150号机为总服务器(有apache)。
第一步:在151号机中更改配置文件
第二步:重启151号机中的squid服务
第三步:设置151号机squid服务器的火墙
firewalld-cmd --add-service=http --permanet #使得http服务通过火墙
注意:虽然squid服务器没有http服务,但是火墙中需要设置http服务通过端口,否则客户机无法通过浏览器访问151
第四步:测试
在50号主机的浏览器中访问<172.25.254.151>,实际访问的是<172.25.254.150>的资源
十一、本章总结
1、在更改Apache的默认发布目录时,Selinux开启的情况下,需要更改发布目录的安全上下文为“httpd_sys_content_t”,远程主机才可以访问目录下的文件;Selinux关闭的情况下就不会出现这个问题,但会导致系统安全性能降低。
2、在基于用户认证的访问控制中,生成认证文件的参数<-cm>为第一次创建认证文件的时候,如果需要往认证文件中添加用户,就不需要参时<-c>了,否则再次执行<-cm>参数,会覆盖已经存在的文件。
3、https协议生成证书后,重新测试之前需要先删除此网站已经存在本地的证书,否则不会发放新的证书
4、设置反向代理时,虽然squid服务器没有http服务,但是火墙中需要设置http服务通过端口,否则客户机无法通过浏览器访问151