Linux学习笔记--17(使用Apache服务部署静态网站)

Apache服务程序部署

Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务。
Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的 Web 服务器会通过 HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户。
在这里插入图片描述
首先配置yum仓库
在这里插入图片描述
其次,安装Apache服务程序。
注意,用yum安装时,命令后面Apache服务的软件包名为httpd。直接用yum install apache会报错。

# yum install httpd -y

最后,启动服务并加入开机自启动,登录后就可以看到了web默认页面。

# systemctl start httpd
# systemctl enable httpd

在这里插入图片描述

配置服务文件参数

httpd服务程序的主要配置文件及存放位置:
在这里插入图片描述
主配置文件中保存的是最重要的服务参数,一般会被保存到/etc目录中以软件名称命名的一个文件夹之中,名字为“服务名称.conf”。
在httpd服务程序的主配置文件中,有三种类型的信息:注释行信息、全局配置、区域配置。
在这里插入图片描述
全局配置:就是一种全局性的配置参数,可作用于对所有的子站点,既保证了子站点的正常访问,也有效减少了频繁写入重复参数的工作量。
区域配置:是单独针对每个独立的子站点进行设置的。

配置httpd服务程序时最常用的参数以及用途描述
在这里插入图片描述
DocumentRoot参数用于定义网站数据的保存路径,其参数的默认值是/var/www/html(即把网站数据存放到这个目录中);而当前网站普遍的首页面名称是index.html,因此可以向/var/www/html/index.html文件中写入一段内容,替换掉httpd服务程序的默认首页面。该操作会立即生效。
在这里插入图片描述
在日常生产中可能我们需要把目录设置到别的路径下。
如,对网站数据保存/var/www/html进行目录修改为/home/wwwroot:
第一步:建立网站数据保存目录,并创建首页文件。
在这里插入图片描述
第二步:打开httpd服务程序的主配置文件,将约122行的定义网站数据保存路径的参数DocumentRoot修改为/home/wwwroot,约127行用于定义目录权限的参数Directory后面的路径也改为/home/wwwroot,保存退出。
在这里插入图片描述
第三步:重新启动httpd服务程序并验证效果
在这里插入图片描述
唉,改应该是改过了,但是被权限阻止了。这里就是SELinux造成的。
可以通过日志查看下 # less /var/log/messages 里面进行/sealer 搜索即可看到。
在这里插入图片描述

SELinux安全子系统

SELinux(Security-Enhanced Linux)是一个强制访问控制(MAC,Mandatory Access Control)的安全子系统。Linux使用SELinux技术目的是为了让各个服务进程都受约束,使其获取本应获取的资源。
SELinux安全子系统能够从多方面监控未付行为:对服务程序的功能进行限制(SELinux域限制可以确保服务程序做不了出格的事情);对文件资源的访问限制(SELinux安全上下文确保文件资源只能被其所属的服务程序进行访问)。
SELinux服务有三种配置模式:
enforcing:强制启用安全策略模式,拦截服务的不合法请求。
permissive:遇到服务越权访问时,只发出警告而不强制拦截。
disabled:对越权行为不警告也不拦截。

SELinux标签具有多种上下文:用户、角色、类型和敏感度。类型上下文通常以_t结尾。
在这里插入图片描述
web服务器类型上下文是httpd_t。
通常位于/var/www/hmtl中的文件和目录的类型上下文是httpd_sys_content_t。
通常位于/tmp和/var/tmp中的文件和目录上下文是tmp_t。
web服务器端口的类型上下文是http_port_t。
许多处理文件的命令都是使用-Z选项来显示或设置SELinux上下文。如ps,ls,cp,mkdir都使用-Z选项。
在这里插入图片描述
SELinux服务的主配置文件中,定义的是SELinux的默认运行状态,可以将其理解为系统重启后的状态,因此它不会在更改后立即生效。
在这里插入图片描述
用getenforce获取当前SELinux服务运行模式;用setenforce [0|1]修改SELinux当前运行模式(0位禁用,1位启用),这是临时修改,重启后会失效。生效需要改配置文件。
在这里插入图片描述
现在我们来对比下,/var/www/html 与 /home/wwwroot的安全上下文
在这里插入图片描述
当我们改成警告模式,可以访问网站
在这里插入图片描述
那么如何更改安全上下文呢?那么就要用semanage

semanage命令与restorecon命令

semanage命令用于管理SELinux的策略,语法格式为“semanage [参数] [文件]”。
semanage命令不仅能够像传统chcon命令那样——设置文件、目录的策略,还可以管理网络端口、消息接口。
semanage命令中常用参数以及作用
在这里插入图片描述
restorecon命令让SELinux安全上下文立即生效,-Rv递归操作,及显示修改过程。
在这里插入图片描述

个人用户主页功能

httpd服务程序提供的个人用户主页功能可以让系统内所有的用户在自己的家目录中管理个人的网站,且访问起来也非常容易。
第一步:httpd服务默认没有开启个人用户主页功能。需要修改配置文件,
第17行的UserDir disabled参数 前面加上井号(#),意思是httpd服务开启个人用户主页功能
第24行的UserDir public_html 参数前面的井号去掉(UserDir参数表示网站数据在用户家目录中的保存目录名称,即public_html目录)

# vim /etc/httpd/conf.d/userdir.conf

在这里插入图片描述
第二步:在用户家目录中建立保存网站数据的目录及首页面文件。还需要把家目录的权限修改为755,保证其他人也有权限读取里面内容。

第三步:重启httpd服务,在浏览器网址中输入网址,格式为“网址/~用户名”(其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格),如果系统报错检查SELinux。
在这里插入图片描述
第四步:思考这次报错的原因是什么。
httpd 服务程序在提供个人用户主页功能时,该用户的网站数据目录本身就应该是存放到与这位用户对应的家目录中的,所以应该不需要修改家目录的 SELinux 安全上下文。
但是,前文还讲到了 Linux 域的概念。 Linux 域确保服务程序不能执行违规的操作,只能本本分分地为用户提供服务。
httpd 服务中突然开启的这项个人用户主页功能到底有没有被 SELinux 域默认允许呢?

getsebool与setsebool命令

getsebool命令 查询并过滤 所有与HTTP协议相关的安全策略。其中off禁止,on允许。

# getsebool -a | grep http

setsebool命令 修改SELinux策略中各条规则的布尔值。-P参数,是让修改后的SELinux策略规则永久且立即生效。

# setsebool -P httpd_enable_homedirs=on

在这里插入图片描述
在这里插入图片描述
有时候网站的网页内容不直接显示,只让通过验证的用户访问,那么网站添加口令功能:
第一步:用htpasswd命令生成密码数据库。-c参数表示第一次生成; 后面再分别添加密码数据库的存放文件,及验证要用到的用户名称(该用户不必是系统中已有的本地账户)。

# htpasswd -c /etc/httpd/passwd zuguo

在这里插入图片描述
第二步:编辑个人用户主页功能的配置文件,第31~37行的参数修改并重启httpd服务。

# vi /etc/httpd/conf.d/userdir.conf
31 <Directory "/home/*/public_html">
32 AllowOverride all
#刚刚生成出来的密码验证文件保存路径
33 authuserfile "/etc/httpd/passwd"
#当用户尝试访问个人用户网站时的提示信息
34 authname "My privately website"
35 authtype basic
#用户进行账户密码登录时需要验证的用户名称
36 require user zuguo
37 </Directory>

# systemctl restart httpd

在这里插入图片描述
注意:用户访问某个用户的个人网站是,输入的账号密码是用htpasswd命令生成的专门用于网站登录的口令密码。
在这里插入图片描述

虚拟主机功能

利永虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。但是该技术无法实现目前云主机技术的硬件资源隔离。
Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机域名或端口号,实现提供多个网址同时为外部提供访问服务的技术,用户请求的资源不同,最终获取到的网页内容也不同。
在这里插入图片描述

基于IP地址

一台服务器多个IP地址,每个地址与服务器上部署的每个网站一一对应,当用户请求访问不同的ip地址会访问到不同的页面资源。
实验用三个IP地址,保证都能访问
在这里插入图片描述
第一步:分别在/home/wwwroot中创建3个目录来保存不同的网站数据,并向其中分别写入网站的首页文件。内容不要相同。

# mkdir -p /home/wwwroot/10
# mkdir -p /home/wwwroot/20
# mkdir -p /home/wwwroot/30
# echo “IP:192.168.10.10”> /home/wwwroot/10/index.html
# ehco “IP:192.168.10.20”> /home/wwwroot/20/index.html
# ehco “IP:192.168.10.30”> /home/wwwroot/30/index.html

第二步:在httpd服务配置文件中大约132行处开始,分别追加写入三个基于IP地址的虚拟主机网站参数。重启httpd服务。

# vim /etc/httpd/conf/httpd.conf
# systemctl restart httpd

在这里插入图片描述
第三步:修改SELinux安全上下文网站数据目录为新的,并用restorecon命令让新设置立即生效。

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/*
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20/*
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30
# semanage fcontext -a -t httpd_sys_content-t /home/wwwroot/30/*
# restorecon -Rv /home/wwwroot

在这里插入图片描述

基于主机域名

服务无法为每个网站分配一个独立的IP地址时候,可以让Apache自动识别用户请求的域名,根据不同的域名请求来传输不同的内容。
DNS解析服务配置还没有,需要手工定义IP地址与域名之间的对应关系。/etc/hosts是linux系统中用于强制把某个主机域名解析到指定IP地址的配置文件。只要配置正确,即使网卡参数中没有DNS信息也依然能够将域名机械为某个IP地址。
第一步:手工定义IP地址与域名间对应关系的配置文件,并生效。

# vim /etc/hosts
192.168.10.10 www.linuxprobe.com www.linuxcool.com www.linuxdown.com

# ping -c 4 www.linuxprobe.com
# ping -c 4 www.linuxcool.com
# ping -c 4 www.linuxdown.com

第二步:分别在/home/wwwroot中创建用于保存不同网站数据的三个目录,并向其中分别写入网站的首页文件。

# mkdir -p /home/wwwroot/linuxprobe
# mkdir -p /home/wwwroot/linuxcool
# mkdir -p /home/wwwroot/linuxdwon
# echo “www.linuxprobe.com” > /home/wwwroot/linuprobe/index.html
# echo “www.linuxcool.com” > /home/wwwroot/linuxcool/index.html
# echo “www.linuxdown.com” > /home/wwwroot/linuxdown/index.html

第三步:在httpd服务配置文件中约132行开始,分别追加写入三个基于主机名的虚拟主机网站参数,重启httpd服务。

# vim /etc/httpd/conf/httpd.conf
# systemctl restart httpd

在这里插入图片描述
第四步:因当前网站数据目录还在/home/wwwroot中,必须要正确设置网站数据目录文件的SELinux安全上下文,与网站服务功能吻合。restorecon命令让设置立即生效。

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxprobe
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxprobe//*
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxcool
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxcool/*
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxdown
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxdown/*
# restorecon -Rv /home/wwwroot

在这里插入图片描述

基于端口号

虚拟主机功能让用户通过指定的端口号来访问服务器上的网站资源。
在使用Apache配置虚拟网站主机功能时,基于端口号方式是最复杂的。要考虑httpd服务程序的配置因素,还要考虑SELinux服务对新开设端口的监控。
一般用80,443,8080等端口来提供网站访问服务是比较合理的,其他端口号则会受到SELinux服务限制。
第一步:在/home/wwwroot中创建网站数据的两个不同目录,并写入网站的首页文件。

# mkdir -p /home/wwwroot/6666
# mkdir -p /home/wwwroot/7777
# echo “port:6666” > /home/wwwroot/6666/index.html
# echo “port:7777” > /home/wwwroot/7777/index.html

第二步:httpd服务配置文件第46、47分别添加用于监听6666和7777端口的参数。

# vim /etc/httpd/conf/httpd.conf

在这里插入图片描述
第三步:在httpd服务配置文件约134行开始分别追加写入两个基于端口号的虚拟主机网站参数,重启httpd服务生效。

# vim /etc/httpd/conf/httpd.conf


第四步:正确配置网站数据目录文件的SELinux安全上下文,restorecon命令立即生效SELinux安全上下文。

# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6666
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/66666/*
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/7777
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/7777/*
# restorecon -Rv /home/wwwroot
# systemctl restart httpd 
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details.

可以看到报错:因为SELinux服务检测到6666和7777端口不属于Apache服务的资源,但现在却以httpd服务程序的名义监听使用。

# semanage port -l | grep http

在这里插入图片描述
第五步:SELinux策略中添加这两个端口号。

# semanage port -a -t http_port_t -p tcp 6666
# semanage port -a -t http_port_t -p tcp 7777
# semanage port -l | grep http
# systemctl restart httpd

在这里插入图片描述

如果火狐浏览器出现了,偶尔会遇到’This address is restricted’ 的错误,这个错误经常发生在不是用默认的80 端口访问某个网址或者IP。
在这里插入图片描述

1.打开火狐浏览器,在地址栏里面输入 about:config 然后回车
在这里插入图片描述
在这里插入图片描述
一个的话,就输入. 6666
多个就是逗号分隔:6666,7777
范围的话就是: 81-6666
或者干脆全覆盖:1-65535

在这里插入图片描述

Apache的访问控制

pache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。通过Allow指令允许某个主机访问服务器上的网站资源,通过Deny指令实现禁止访问。有时会用到Order指令,来定义allow或deny指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。如”Order Allow,Deny”表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求。
第一步:先在服务器上建立一个网站数据目录的子目录,并在子目录中建一个首页文件。

# mkdir -p /var/www/html/server
# echo "This is test web site." > /var/www/html/server/index.html

第二步:打开httpd服务配置文件,第161行后面添加规则来限制源主机的访问。
含义是允许使用Firefox浏览器的主机访问服务器上的首页文件,除此之外所有请求都将被拒绝。
在这里插入图片描述
重启服务,及相关防火墙的设置

# systemctl restart httpd
# iptables -F
# iptables-save
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cdm --reload

可以看到可以访问主页,但是无法访问设置的server页面,火狐的则可以
在这里插入图片描述
在这里插入图片描述
可以通过匹配源主机的 IP 地址进行访问控制
在这里插入图片描述

照片见证

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
B站上的韩顺平老师的《Linux学习笔记》系列课程非常值得推荐。通过这个课程,我学到了很多关于Linux操作系统的知识和技能。 首先,韩老师在课程详细介绍了Linux的基本概念和特点。我清楚地了解到Linux是一个开源的操作系统,具有稳定性、安全性和可定制性强的特点。这让我对Linux有了更深入的理解,也更有信心去学习使用它。 其次,韩老师从基础开始,逐步讲解了Linux的安装和配置。他用简单明了的语言和实际操作的示范,帮助我了解了如何在虚拟机上安装Linux系统,并设置网络、用户账户、文件系统等。这为我后续的学习和实践打下了坚实的基础。 此外,韩老师还讲解了Linux的常用命令和工具。他详细介绍了常用的文件和目录操作命令,比如cd、ls、mkdir、cp等。同时,他还讲解了grep、sed、awk等强大的文本处理工具的使用方法。这些内容帮助我更加高效地进行文件管理和数据处理。 最后,韩老师还介绍了Linux的网络管理和安全防护。他讲解了如何配置网络连接、使用ssh远程登录以及设置防火墙等内容。这些知识对我了解网络和保护系统安全非常有帮助。 总的来说,韩顺平老师的《Linux学习笔记》课程非常实用,对于初学者来说是入门学习Linux的好选择。他通过深入浅出的讲解和丰富的实操示范,让我可以轻松地学习Linux的基本知识和操作技巧。我相信通过学习这个课程,我会在Linux领域有更进一步的发展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值