Apache服务(RHCE)

实验环境:
httpd服务器:rhel8,ip:192.168.0.41
客户端:rhel7,ip:192.168.0.40

Apache的作用

在我们私用互联网访问地址的时候,通常是以http://的方式访问,
http://为超文本传输协议
在这里插入图片描述
商家或者企业将资源通过超文本传输的方式将资源进行共享。
而提供超文本传输协议的软件也有很多:
可以使用命令curl -I打印HTTP头部信息,例如:
百度使用的超文本传输软件为Apache:
在这里插入图片描述
qq使用的为stgw:
在这里插入图片描述

京东使用的为jfe:
在这里插入图片描述
淘宝使用的为Tengine
在这里插入图片描述
网易使用的为nginx
在这里插入图片描述
可以看到有很多类似的软件,但是目前主流的为Apache和nginx。

Apache的安装

在这里插入图片描述
安装: httpd.x86_64 :
在这里插入图片描述

Apache的启用

Apache的服务名称:httpd
默认是关闭状态:
在这里插入图片描述
使用命令:systemctl enable --now httpd开启httpd并使其开机启动。
在这里插入图片描述
httpd启动成功
在客户主机中使用超文本传输协议访问httpd服务器:
在这里插入图片描述
此时还不能访问。这是因为服务器主机的firewalld服务是开启状态,要对其进行设定:

在这里插入图片描述
rhel8中的火墙是开启状态。
查看火墙策略:
在这里插入图片描述
在火墙策略里是没有我们要使用的httpd服务。
在火墙中永久开启http访问 及永久开启https访问 :

[root@rhel8_node1 ~]# firewall-cmd --permanent --add-service=http
success
[root@rhel8_node1 ~]# firewall-cmd --permanent --add-service=https
success

添加成功后,刷新火墙使设定生效:

[root@rhel8_node1 ~]# firewall-cmd --reload 
success

再次查看火墙策略,成功添加http和https:
在这里插入图片描述
返回客户主机进行测试:
在这里插入图片描述
成功访问Apache测试页。

Apache的基本信息

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端口修改

使用命令:

[root@rhel8_node1 ~]# ss -antlupe | grep httpd

可以看到http使用的端口:80
在这里插入图片描述
通过修改主配置文件来修改端口:

[root@rhel8_node1 ~]# vim /etc/httpd/conf/httpd.conf 

在这里插入图片描述
将端口修改为8080:
在这里插入图片描述

修改完成后,保存退出,重启http:

[root@rhel8_node1 ~]# systemctl restart httpd

重启服务后,使用命令:[root@rhel8_node1 ~]# ss -antlupe | grep httpd再次查看httpd的端口:
在这里插入图片描述将端口修改后,客户主机就不能通过原来的端口进行访问:
在这里插入图片描述
且使用8080端口还是无法访问:
在这里插入图片描述
这是因为火墙没有开放8080端口的访问,将8080端口添加进火墙策略:

[root@rhel8_node1 ~]# firewall-cmd --permanent --add-port=8080/tcp
success

再刷新火墙是设定生效:

[root@rhel8_node1 ~]# firewall-cmd --reload 
success

再次列出火墙策略:
在这里插入图片描述
可以看到,8080端口被成功添加进火墙策略。
再次返回客户主机进行访问:
在这里插入图片描述
这个时候,客户主机就可以通过8080端口访问http服务器。
若将端口设定为6666:
在这里插入图片描述
发现,此时重启http服务是重启不了的:
在这里插入图片描述
查看日志:
在这里插入图片描述
可以看到,日志里的说明为端口不能指定为6666,且与selinux有关。
这是因为selinux对端口进行了限制:
服务器主机的selinux当前为打开状态,更改selinux为警告模式:
在这里插入图片描述

再次重启httpd:
在这里插入图片描述
使用命令[root@rhel8_node1 ~]# ss -antlupe | grep httpd
查看httpd端口:

在这里插入图片描述
端口被成功更改为6666.
设定selinux的默认使用方式,使apache允许使用6666端口:
使用命令:semanage port -l | grep http 查看允许httpd使用的端口:
在这里插入图片描述
可以看到,允许使用的端口中没有6666这个端口,所以需要将端口6666添加进去:
使用命令:semanage port -a -t http_port_t -p tcp 6666
-a为指定添加,-t为添加位置,-p为添加端口号
可以看到,端口6666被成功添加:
在这里插入图片描述
将selinux更改为强制模式,并重启httpd:
在这里插入图片描述

默认发布文件的修改

默认发布文件为/var/www/html/index.html
若此文件存在,则客户主机访问次文件信息。
若此文件不存在,则客户主机访问的为Apache的默认测试页面。

当前默认发布文件不存在:在这里插入图片描述
客户主机访问的为
Apache的默认测试页面:
在这里插入图片描述
新建index.html:
在这里插入图片描述
编辑完成后保存退出。
在客户主机进行访问测试:
在这里插入图片描述

成功访问到服务器主机的index.html文件内容!
此时,我们重新写一个自己的发布文件:test.html:
在这里插入图片描述
编辑完成后保存退出,回到客户主机进行测试:
默认访问的内容还是index.html:
在这里插入图片描述
要想访问我们添加的发布文件,必须添加目录:
在这里插入图片描述
若想客户主机默认访问的为我们自己建立的发布文件,则需要修改配置文件:
在这里插入图片描述
编辑完成后,保存退出。重启httpd。

此时,默认发布文件为test.html和index.html,且有顺序,当test.html不存在时,index.html为默认发布文件,返回客户主机进行测试:
默认访问:
在这里插入图片描述

当删除test.html后,默认发布文件则为index.html:
在这里插入图片描述
客户主机访问效果:
在这里插入图片描述
可以看到,此时默认发布文件变为index.html

默认发布目录的修改

默认发布目录为/var/www/html

首先创建一个新的发布目录,并在其创建发布文件:
在这里插入图片描述
发布文件内容:
在这里插入图片描述
编辑完成后保存退出。
通过修改http的主配置文件来修改http的默认发布目录:
在这里插入图片描述
将其默认发布目录注释,添加新的默认发布目录。注意:添加完成后要对目录进行授权,否则客户主机访问使会被拒绝。
修改完成后,保存退出,重启httpd。在客户主机进行测试:
在这里插入图片描述
发现还是无法访问。推测导致不能访问的原因为selinux,将服务器主机selinux更改为警告模式:
在这里插入图片描述
再次返回客户主机进行访问测试:
在这里插入图片描述
成功访问/testdir/html/indx.html文件!
导致这一现象的原因为新建的默认发布目录的安全上下文与系统默认的安全上下文不同所导致:
在这里插入图片描述
所以将新建的默认发布目录的安全上下文改为系统默认发布目录的安全上下文:
安全上下文的更改:

[root@rhel8_node1 html]# semanage fcontext -a -t httpd_sys_content_t '/testdir(/.*)?'

刷新/testdir:

[root@rhel8_node1 html]# restorecon -RvvF /testdir/

在这里插入图片描述
将selinux还原为强制模式:
在这里插入图片描述
再次返回客户主机进行访问测试:
在这里插入图片描述

成功访问!

Apache的访问控制

基于客户端ip的访问控制

在此实验中,实验环境如下:
服务器主机为rhel8,ip:192.168.0.41
客户主机:rhel7,ip:1972168.0.40
服务器充当客户主机rhel8,ip:192.168.0.41
首先将默认发布目录还原,在/var/www/html新建目录test
在新建的目录下新建发布文件:
在这里插入图片描述
发布文件内容:
在这里插入图片描述
使用两台客户主机进行访问测试:
rhel7:
在这里插入图片描述
可以访问。
rhel8:
在这里插入图片描述
rhel8可以访问。

ip访问黑名单:

基于客户端ip的访问控制,修改http主配置文件:

在这里插入图片描述
次设定为先读取allow内容,后读取deny内容。(范围小的在后)
效果为除了192.168.0.41主机不能访问,其他主机都可以访问。
编辑完成后,保存退出,重启httpd。再次使用两台客户主机进行访问测试:
在这里插入图片描述
rhel7正常访问

在这里插入图片描述
rhel8访问被拒绝。

ip访问白名单

方法同黑名单:
在这里插入图片描述
(范围小的在后)效果为除了192.168.0.41主机能访问,其他主机都不可以访问,编辑完成后,保存退出,重启httpd。再次使用两台客户主机进行访问测试:
在这里插入图片描述
rhel8:
在这里插入图片描述
rhel8成功访问。

rhel7:在这里插入图片描述
rhel7访问被拒绝。
基于ip的访问控制存在的最大问题为用户可以随意更改自己的id,会造成设定失效。

基于用户认证的访问控制

在http主配置文件中添加用户认证信息,如下图:
在这里插入图片描述
接下来,生成用户认证文件:
使用命令:htpasswd -cm /etc/httpd/htpasswdfile admin生成admin用户的认证信息:
其中-c为新建(当htpasswd文件不存在在时),-m为使用md5的加密方式
在这里插入图片描述
在这里插入图片描述
若再添加新用户时,使用命令:htpasswd -m /etc/httpd/htpasswdfile user添加user用户认证文件。
注意:此处htpasswd -cm /etc/httpd/htpasswdfile admin不能加-p参数,若添加-p参数,就会将原htpasswd文件覆盖,原数据就丢失!
在这里插入图片描述

完成后,重启httpd。返回客户主机进行访问测试:

在这里插入图片描述
这个时候我们就需要认证。

输入用户和密码,再次进入:
在这里插入图片描述
在这里插入图片描述
客户主机成功访问!
若输入错误的认证信息,则会一直让你认证:
在这里插入图片描述
可以看到,只要是认证通过的用户就可以成功访问。

若想要对用户认证进行访问控制,则修改http主配置文件:
只允许admin用户通过:
在这里插入图片描述

编辑完成后,保存退出,重启httpd。再次使用两台客户主机进行访问测试:
在这里插入图片描述
用户admin认证完成后成功访问,user用户不能通过认证!

Apache的虚拟主机

若想要访问同一ip下的不同的站点,则需要使用apache的虚拟主机

思路:新建子站点目录/var/www/xng.com/test{1…3}为三个子站点的发布目录,在各自发布目录中新建发布文件index.html。

当访问test1.xng.com时---------->/var/www/xng.com/test1/index.html
当访问test2.xng.com时---------->/var/www/xng.com/test2/index.html
当访问test3.xng.com时---------->/var/www/xng.com/test3/index.html
当访问www.xng.com时---------->/var/www/html/index.html


在这里插入图片描述
http的子配置文件:/etc/httpd/conf.d/VirtualHost.conf ,编辑子配置文件,指定虚拟主机信息:

在这里插入图片描述

编辑完成后,保存退出。重启httpd。
此时我们在客户主机不能直接以域名访问的方式访问站点,在客户主机做地址解析:
编辑本地解析文件:

vim /etc/hosts

在这里插入图片描述
编辑完成后,保存退出。
回到客户主机访问测试:
访问默认站点:
在这里插入图片描述
访问test1/xng.com:

在这里插入图片描述
访问test2/xng.com:
在这里插入图片描述
访问test3/xng.com:
在这里插入图片描述成功实现同一ip下不同站点的访问!

Apache的语言支持

html

默认支持html语言。

php

首先在服务器主机安装php语言:
在这里插入图片描述
下载完成后,重启httpd使apache识别php。

新建/var/www/html/php目录并在次目录下建立php语言发布文件:index.php:
按照如下的格式编写,发布php的默认测试页。
在这里插入图片描述
编辑完成后保存退出,返回客户主机进行访问测试:
在这里插入图片描述
访问成功!

perl

perl语言的主要功能是让系统支持cgi

关于cgi: CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。

首先给cgi创建目录:/var/www/html/cgi
建立cgi的发布文件:index.cgi
可以在apache的用户手册上查看cgi的书写格式:
在这里插入图片描述
为了使其动态效果明显,我们这里使用cgi输出 date:
编辑index.cgi:
在这里插入图片描述
编辑完成后保存退出。 注意:因index.cgi里面包含命令,所以必须给index.cgi添加执行权限。
在http的子配置目录里添加该cgi,告诉系统此文件须执行:
vim /etv/http/conf.d/VirtualHost.conf
在这里插入图片描述
若没有进行此步骤,则index.cgi文件内的命令或程序不能被执行,效果如图:
在这里插入图片描述
编辑配置文件完成后保存退出,重启httpd。返回客户主机访问测试效果:
在这里插入图片描述
刷新:
在这里插入图片描述
在这里插入图片描述
可以看到,每刷新一次执行的结果变化一次,这也说明了perl语言的动态性。

Apache的加密访问

在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。
所以首先在服务器上安装mod_ssl:
在这里插入图片描述
安装完成后,重启httpd。此时,就可以使用https://的方式进行访问。
在这里插入图片描述
此时的证书为系统所生成的证书,并不是我自己的证书:
在这里插入图片描述
将系统生成的证书删除:
在这里插入图片描述
在这里插入图片描述
接下来 需要生成自己的证书:
思路:生成key文件–>生成签名文件–>生成证书–>将key文件和证书文件添加到ssl的配置文件
使用命令openssl genrsa 1024/2048使用rsa加密方式生成1024位或者2048位的加密字符(默认为2048位):
在这里插入图片描述
现将生成的加密字符导入到/etc/kpi/tls/private/www.xng.com.key 2048 生成key文件:
在这里插入图片描述

生成key文件后,对key文件进行签名,将自己的信息提交给ca机构,进行证书请求:
使用命令:[root@rhel8_node1 private]# openssl req -new -key /etc/pki/tls/private/www.xng.com.key -out /etc/pki/tls/cers/www.xng.com.csr
将认证信息生成证书签证请求文件,并将文件存放在/etc/pki/tls/cers/下,体检建立cers目录,并给写权限:
在这里插入图片描述
接下来填写信息:

在这里插入图片描述
获取证书:
使用命令:[root@rhel8_node1 cers]# openssl x509 -req -days 365 -in /etc/pki/tls/cers/www.xng.com.csr -signkey /etc/pki/tls/private/www.xng.com.key -out /etc/pki/tls/cers/www.xng.com.crt将证书生成,为/etc/pki/tls/cers/下的www.xng.com.crt。
到此我们呢该有的三个文件就都有了:
在这里插入图片描述

下来将www.xng.com.crt和www.xng.com.key添加进ssl的配置文件中
ssl的配置文件为:/etc/httpd/conf.d/ssl.conf
在这里插入图片描述
在这里插入图片描述
编辑完成后,保存退出。重启httpd,返回客户主机进行访问测试:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
可以看到,访问成功。我们继续查看证书信息:
在这里插入图片描述
在这里插入图片描述
到此,我们自己的key的证书就成功生成了。
注意:https://的方式虽然安全,但是缺点是传输速率会比http://方式访问要慢。
在本章的虚拟主机实验中,我们分别有test1.xng.com test2.xng.com test3.xng.com 三个子站点,这里若将test3用于加密访问,我们可以修改配置文件:/etc/httpd/conf.d/VirtualHost.conf
在这里插入图片描述
编辑完成后,保存退出。重启httpd,并返回客户主机进行访问测试:

在这里插入图片描述
访问test3.xng.com时,并没有出现test3的内容,内容为默认发布文件的内容:

在这里插入图片描述
手动https://test3.xng.com:
在这里插入图片描述
可以发现,在访问test3.xng.com时,默认还是以http://方式访问,必须手动https才行。
那么test3.xng.com能不能像其他的企业网站一样,直接自动使用https的方式吗?
答案是肯定的! 我们可以在访问test3.xng.com时访问的端口由80端口变为443端口。此功能为网页重写功能。

首先,安装httpd-manual:
在这里插入图片描述
安装完毕,重启httpd,打开apache的手册查看网页重写:
在这里插入图片描述
在这里插入图片描述
将网页重写功能添加进配置文件:/etc/httpd/conf.d/VirtualHost.conf
在这里插入图片描述
其中:^(/.*)$ 代表客户地址栏中输入的地址 ,%{HTTP_HOST} 为客户主机,$1 为RewriteRule后面跟的第一串字符的值 。
编辑完成后,保存退出。重启httpd,这样就完成了网页重写功能:当访问test3.xng.com的80端口时,会自动跳转到443端口,完成自动使用https://访问的功能。返回客户主机进行访问测试:

在这里插入图片描述
在这里插入图片描述

Squid+Apache

Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求。

Squid的正向代理:

在这里插入图片描述
客户主机因为某些原因不能与目标主机建立连接,可以与squid主机建立连接,squid主机可以与目标主机建立连接,此时,客户主机可以与squid建立连接,将squid主机作为代理服务器,代理服务器会将客户主机想要建立通讯的目标主机的信息缓存到本机,客户主机就能完成对目标主机的访问。
VPN:客户主机和代理服务器squid主机之间用互联网建立的专用隧道叫做vpn。

实验环境:
单网卡主机设定ip不能上网 双网卡主机设定ip1可以连接单网卡主机,设定ip2可以上网。
实验效果:
让单网卡主机不能上网但浏览器可以访问互联网页

实验:
安装apache的主机配备双网卡,一块网卡可以正常上网(192网段),另一块网卡不能正常上网(172网段),但是能与单网卡主机(172网段)进行通讯。

单网卡主机:
在这里插入图片描述
在这里插入图片描述
双网卡主机:
在这里插入图片描述
双网卡主机安装squid:
在这里插入图片描述
修改squid配置文件:/etc/squid/squid.conf
默认不允许任何人访问:
在这里插入图片描述
将其修改为允许所有人访问:
在这里插入图片描述
将squid的缓存目录打开:
在这里插入图片描述
这将在/var/spool/squid 下建立16个一级目录和256个二级目录,缓存大小不能超过100M。
编辑完成后保存退出,并重启squid。
缓存目录自动建立:

在单网卡主机(12网段,不能上网)上的firefox进行访问测试:
对浏览器进行配置:
在这里插入图片描述
在这里插入图片描述
在squid主机里将3128端口添加进火墙,并重启火墙:
在这里插入图片描述
返回单网卡主机进行访问:
在这里插入图片描述
单网卡主机成功访问www.baidu.com在这里插入图片描述

squid反向代理

squid反向代理也就是cdn加速。
我们以腾讯公司为例子:腾讯公司的服务器位置在深圳市,我作为用户位置在西安市,两地相距很远,直接访问深圳市的服务器会经过很多路由,因此访问速度相对来说慢。且每个省份的用户都去访问腾讯的服务器会导致腾讯服务器的负载变得特别大,所以腾讯公司会在各个省市租用服务器。
所以,我去访问西安的被租用的服务器访问深圳的服务器的时间是快于直接访问深圳的服务器。当我去访问深圳服务器时,我访问西安本地的服务器,此服务器又去访问深圳的服务器,最终实现访问的加速。也就是cdn加速。

实验:安装过apache的资源主机ip:192.168.0.41
squid主机ip:192.168.0.42
客户主机ip:192.168.0.40
目标效果:客户主机访问squid主机,可以获得资源主机的资源。
为保证实验效果,这里将资源主机的http默认发布文件改为其ip:
在这里插入图片描述

首先,squid主机安装squid:
在这里插入图片描述
对squid进行配置,编辑squid配置文件:/etc/squid/squid.conf
在这里插入图片描述
在这里插入图片描述
vhost 支持虚拟域名 vport 支持虚拟端口
可以查看/usr/share/doc/squid/squid.conf.document (squid的帮助文档)查看其缓存路径书写格式:

在这里插入图片描述
当192.168.0.42的80端口被访问会从192.168.0.41的80端口缓存数据
编辑完成后保存退出,并重启squid。使用客户主机进行当问测试:
在这里插入图片描述
访问成功!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值