Apache服务(RHCE)

文章目录

  • Apache的作用
  • Apache的安装
  • Apache的启用
  • Apache的基本信息
  • Apache的基本配置
    • Apache端口修改
    • 默认发布文件的修改
    • 默认发布目录的修改
  • Apache的访问控制
    • 基于客户端ip的访问控制
      • ip访问黑名单:
      • ip访问白名单
    • 基于用户认证的访问控制
  • Apache的虚拟主机
  • Apache的语言支持
    • html
    • php
    • perl
  • Apache的加密访问
  • Squid+Apache
    • Squid的正向代理:
    • squid反向代理

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

Apache的作用

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

京东使用的为jfe:
Apache服务(RHCE)_第4张图片
淘宝使用的为Tengine
Apache服务(RHCE)_第5张图片
网易使用的为nginx
Apache服务(RHCE)_第6张图片
可以看到有很多类似的软件,但是目前主流的为Apache和nginx。

Apache的安装

Apache服务(RHCE)_第7张图片
安装: httpd.x86_64 :
Apache服务(RHCE)_第8张图片

Apache的启用

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

Apache服务(RHCE)_第11张图片
rhel8中的火墙是开启状态。
查看火墙策略:
Apache服务(RHCE)_第12张图片
在火墙策略里是没有我们要使用的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服务(RHCE)_第13张图片
返回客户主机进行测试:
Apache服务(RHCE)_第14张图片
成功访问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 

Apache服务(RHCE)_第15张图片
将端口修改为8080:
Apache服务(RHCE)_第16张图片

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

[root@rhel8_node1 ~]# systemctl restart httpd

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

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

再刷新火墙是设定生效:

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

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

再次重启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被成功添加:
Apache服务(RHCE)_第23张图片
将selinux更改为强制模式,并重启httpd:
在这里插入图片描述

默认发布文件的修改

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

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

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

此时,默认发布文件为test.html和index.html,且有顺序,当test.html不存在时,index.html为默认发布文件,返回客户主机进行测试:
默认访问:
Apache服务(RHCE)_第30张图片

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

默认发布目录的修改

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

首先创建一个新的发布目录,并在其创建发布文件:
在这里插入图片描述
发布文件内容:
Apache服务(RHCE)_第32张图片
编辑完成后保存退出。
通过修改http的主配置文件来修改http的默认发布目录:
Apache服务(RHCE)_第33张图片
将其默认发布目录注释,添加新的默认发布目录。注意:添加完成后要对目录进行授权,否则客户主机访问使会被拒绝。
修改完成后,保存退出,重启httpd。在客户主机进行测试:
Apache服务(RHCE)_第34张图片
发现还是无法访问。推测导致不能访问的原因为selinux,将服务器主机selinux更改为警告模式:
在这里插入图片描述
再次返回客户主机进行访问测试:
Apache服务(RHCE)_第35张图片
成功访问/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/

Apache服务(RHCE)_第36张图片
将selinux还原为强制模式:
在这里插入图片描述
再次返回客户主机进行访问测试:
Apache服务(RHCE)_第37张图片

成功访问!

Apache的访问控制

基于客户端ip的访问控制

在此实验中,实验环境如下:
服务器主机为rhel8,ip:192.168.0.41
客户主机:rhel7,ip:1972168.0.40
服务器充当客户主机rhel8,ip:192.168.0.41
首先将默认发布目录还原,在/var/www/html新建目录test
在新建的目录下新建发布文件:
Apache服务(RHCE)_第38张图片
发布文件内容:
Apache服务(RHCE)_第39张图片
使用两台客户主机进行访问测试:
rhel7:
Apache服务(RHCE)_第40张图片
可以访问。
rhel8:
Apache服务(RHCE)_第41张图片
rhel8可以访问。

ip访问黑名单:

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

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

Apache服务(RHCE)_第44张图片
rhel8访问被拒绝。

ip访问白名单

方法同黑名单:
Apache服务(RHCE)_第45张图片
(范围小的在后)效果为除了192.168.0.41主机能访问,其他主机都不可以访问,编辑完成后,保存退出,重启httpd。再次使用两台客户主机进行访问测试:
Apache服务(RHCE)_第46张图片
rhel8:
Apache服务(RHCE)_第47张图片
rhel8成功访问。

rhel7:Apache服务(RHCE)_第48张图片
rhel7访问被拒绝。
基于ip的访问控制存在的最大问题为用户可以随意更改自己的id,会造成设定失效。

基于用户认证的访问控制

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

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

Apache服务(RHCE)_第53张图片
这个时候我们就需要认证。

输入用户和密码,再次进入:
Apache服务(RHCE)_第54张图片
Apache服务(RHCE)_第55张图片
客户主机成功访问!
若输入错误的认证信息,则会一直让你认证:
Apache服务(RHCE)_第56张图片
可以看到,只要是认证通过的用户就可以成功访问。

若想要对用户认证进行访问控制,则修改http主配置文件:
只允许admin用户通过:
Apache服务(RHCE)_第57张图片

编辑完成后,保存退出,重启httpd。再次使用两台客户主机进行访问测试:
Apache服务(RHCE)_第58张图片
用户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


Apache服务(RHCE)_第59张图片
http的子配置文件:/etc/httpd/conf.d/VirtualHost.conf ,编辑子配置文件,指定虚拟主机信息:

Apache服务(RHCE)_第60张图片

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

vim /etc/hosts

Apache服务(RHCE)_第61张图片
编辑完成后,保存退出。
回到客户主机访问测试:
访问默认站点:
Apache服务(RHCE)_第62张图片
访问test1/xng.com:

Apache服务(RHCE)_第63张图片
访问test2/xng.com:
Apache服务(RHCE)_第64张图片
访问test3/xng.com:
Apache服务(RHCE)_第65张图片成功实现同一ip下不同站点的访问!

Apache的语言支持

html

默认支持html语言。

php

首先在服务器主机安装php语言:
Apache服务(RHCE)_第66张图片
下载完成后,重启httpd使apache识别php。

新建/var/www/html/php目录并在次目录下建立php语言发布文件:index.php:
按照如下的格式编写,发布php的默认测试页。
Apache服务(RHCE)_第67张图片
编辑完成后保存退出,返回客户主机进行访问测试:
Apache服务(RHCE)_第68张图片
访问成功!

perl

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

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

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

Apache的加密访问

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

生成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目录,并给写权限:
Apache服务(RHCE)_第83张图片
接下来填写信息:

Apache服务(RHCE)_第84张图片
获取证书:
使用命令:[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。
到此我们呢该有的三个文件就都有了:
Apache服务(RHCE)_第85张图片

下来将www.xng.com.crt和www.xng.com.key添加进ssl的配置文件中
ssl的配置文件为:/etc/httpd/conf.d/ssl.conf
Apache服务(RHCE)_第86张图片
Apache服务(RHCE)_第87张图片
编辑完成后,保存退出。重启httpd,返回客户主机进行访问测试:
Apache服务(RHCE)_第88张图片

Apache服务(RHCE)_第89张图片

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

Apache服务(RHCE)_第95张图片
访问test3.xng.com时,并没有出现test3的内容,内容为默认发布文件的内容:

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

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

Apache服务(RHCE)_第102张图片
Apache服务(RHCE)_第103张图片

Squid+Apache

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

Squid的正向代理:

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

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

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

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

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

squid反向代理

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

实验:安装过apache的资源主机ip:192.168.0.41
squid主机ip:192.168.0.42
客户主机ip:192.168.0.40
目标效果:客户主机访问squid主机,可以获得资源主机的资源。
为保证实验效果,这里将资源主机的http默认发布文件改为其ip:
Apache服务(RHCE)_第115张图片

首先,squid主机安装squid:
Apache服务(RHCE)_第116张图片
对squid进行配置,编辑squid配置文件:/etc/squid/squid.conf
Apache服务(RHCE)_第117张图片
Apache服务(RHCE)_第118张图片
vhost 支持虚拟域名 vport 支持虚拟端口
可以查看/usr/share/doc/squid/squid.conf.document (squid的帮助文档)查看其缓存路径书写格式:

Apache服务(RHCE)_第119张图片
当192.168.0.42的80端口被访问会从192.168.0.41的80端口缓存数据
编辑完成后保存退出,并重启squid。使用客户主机进行当问测试:
Apache服务(RHCE)_第120张图片
访问成功!

你可能感兴趣的:(练习,笔记,linux)