一、前言
悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非。舟遥遥以轻飏,风飘飘而吹衣。问征夫以前路,恨晨光之熹微。
第一版我已经全部放到我的精选里了,大家可以点开我的头像主页,选择精选观看,本系列依照《Linux就该这么学》第二版随书学习练习操作,将一些课本上不顺畅的地方,全部以最简方式免费开源展示给大家,资源大家可以自行百度,学习起来我们既要多巴胺也要内啡肽。
终于我们要开始做网站了,如果前9章用成长来形容,就是在地上学怎么爬,而网站搭建是我们站起来的第一步,跟着这个系列学到这里的人,出去找个基础运维的工作应该是十拿九稳的,找到工作不代表能胜任,从这一章开始我们要大步流星,古语说:勿意、勿必、勿固、勿我。正所谓承认自己的认知局限。得服高人,要留后路,做事果敢执着,且不执拗,别人劝你你要听,别太自以为是,送上天王的一首《听妈妈的话》希望可以继续好好学习,不忘初心牢记使命。
同时我也想说点别的,我其实也有惰性,有时候懒得学习,但是我相信知识改变命运,不要靠投机取巧,这是我对我专业的热爱和对职业的基本操守,希望大家以后入职或者现在工作的人能够得到一些启发。
10.1 网站服务程序
Web网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的Web服务器会通过HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户。目前能够提供Web网络服务的程序有IIS、Nginx和Apache等。
Apache程序是目前拥有很高市场占有率的Web服务程序之一,其跨平台和安全性广泛被认可且拥有快速、可靠、简单的API扩展。Apache服务程序可以运行在Linux系统、UNIX系统甚至是Windows系统中,它支持基于IP、域名及端口号的虚拟主机功能,支持多种认证方式,集成有代理服务器模块、安全Socket层(SSL),能够实时监视服务状态与定制日志消息,并支持各类丰富的模块。
动手安装Apache服务程序。
[root@localhost ~]# dnf install -y httpd
启用httpd服务程序并将其加入到开机启动项中
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
在虚拟机的网页上输入http://127.0.0.1
10.2 配置服务文件参数
在Linux系统中配置服务,其实就是修改服务的配置文件,知道这些配置文件的所在位置以及用途。httpd服务程序的主要配置文件及存放位置
Linux系统中的配置文件
作用 | 文件名称 |
服务目录 | /etc/httpd |
主配置文件 | /etc/httpd/conf/httpd.conf |
网站数据目录 | /var/www/html |
访问日志 | /var/log/httpd/access_log |
错误日志 | /var/log/httpd/error_log |
主配置文件中保存的是最重要的服务参数,一般会被保存到/etc目录中以软件名称命名的一个文件夹之中,名字为“服务名称.conf”在httpd服务程序的主配置文件中,存在3种类型的信息:注释行信息、全局配置、区域配置
阿帕奇的配置是我们以后学运维会经常用到的,这是重点内容
配置httpd服务程序时最常用参数及用途描述
参数 | 作用 |
ServerRoot | 服务目录 |
ServerAdmin | 管理员邮箱 |
User | 运行服务的用户 |
Group | 运行服务的用户组 |
ServerName | 网站服务器的域名 |
DocumentRoot | 网站数据目录 |
Listen | 监听的IP地址与端口号 |
DirectoryIndex | 默认的索引页页面 |
ErrorLog | 错误日志文件 |
CustomLog | 访问日志文件 |
Timeout | 网页超时时间,默认为300秒 |
DocumentRoot参数用于定义网站数据的保存路径,其参数的默认值是/var/www/html(即把网站数据存放到这个目录中);而当前网站普遍的首页面名称是index.html,因此可以向/var/www/html/index.html文件中写入一段内容,替换掉httpd服务程序的默认首页面。该操作会立即生效。
[root@bogon ~]# echo "weihongbin" > /var/www/html/index.html
打开虚拟机的浏览器,输入http://127.0.0.1
把保存网站数据的目录修改为/home/wwwroot目录
第1步:建立网站数据的保存目录,并创建首页文件。
[root@bogon ~]# mkdir /home/wwwroot
[root@bogon ~]# echo "new web" > /home/wwwroot/index.html
第2步:打开httpd服务程序的主配置文件,修改相关网站路径参数和目录权限参数
[root@bogon ~]# vim /etc/httpd/conf/httpd.conf
122 DocumentRoot
"/home/wwwroot"
123
124 #
125 # Relax access to content within /var/www.
126 #
127
"/home/wwwroot"
>
128 AllowOverride None
129 # Allow open access:
130 Require all granted
131
132
133 # Further relax access to the default document root:
134
"/home/wwwroot"
>
第3步:重新启动httpd服务程序并验证效果
[root@bogon ~]# systemctl restart httpd
刷新后看到如下结果不要惊慌,权限不足的原因是selinux的问题
10.3 SELinux安全子系统
Linux系统使用SELinux技术的目的是为了让各个服务进程都受到约束,使其仅获取到本应获取的资源。
SELinux服务有3种配置模式,具体如下。
enforcing:强制启用安全策略模式,将拦截服务的不合法请求。
permissive:遇到服务越权访问时,只发出警告而不强制拦截。
disabled:对于越权的行为不警告也不拦截。
查看SELinux服务主配置文件中定义的默认状态
[root@bogon ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
使用getenforce命令获得当前SELinux服务的运行模式:
[root@bogon ~]# getenforce
Enforcing
用setenforce [0|1]命令修改SELinux当前的运行模式(0为禁用,1为启用)。注意,这种修改只是临时的,在系统重启后就会失效:
[root@bogon ~]# setenforce 0
[root@bogon ~]# getenforce
Permissive
再次刷新网页,就会看到正常的网页内容了
httpd服务程序的功能是允许用户访问网站内容,因此SELinux肯定会默认放行用户对网站的请求操作,但是我们将网站数据的默认保存目录修改为/home/wwwroot,/home目录是用来存放普通用户的家目录数据的,而现在,httpd提供的网站服务却要去获取普通用户家目录中的数据,这显然违反了SELinux的监管原则。
把SELinux服务恢复到强制启用安全策略模式,然后分别查看原始网站数据的保存目录与当前网站数据的保存目录是否拥有不同的SELinux安全上下文值。在ls命令中,-Z参数用于查看文件的安全上下文值,-d参数代表对象是个文件夹。
[root@bogon ~]# setenforce 1
[root@bogon ~]# ls -Zd /var/www/html/
system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
[root@bogon ~]# ls -Zd /home/wwwroot/
unconfined_u:object_r:user_home_dir_t:s0 /home/wwwroot/
用户段system_u代表系统进程的身份,角色段object_r代表文件目录的角色,类型段httpd_sys_content_t代表网站服务的系统文件。
semanage命令用于管理SELinux的策略,语法格式为“semanage [参数] [文件]”。
semanage命令中常用参数及作用
参数 | 作用 |
-l | 查询 |
-a | 添加 |
-m | 修改 |
-d | 删除 |
向新的网站数据目录中新添加一条SELinux安全上下文,让这个目录以及里面所有文件能够被httpd服务程序访问到:
[root@bogon ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@bogon ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*
在执行上述设置之后,还无法立即访问网站,还需要使用restorecon命令将设置好的SELinux安全上下文立即生效。
使用restorecon命令时,可以加上-Rv参数对指定的目录进行递归操作,以及显示SELinux安全上下文的修改过程
[root@bogon ~]# restorecon -Rv /home/wwwroot/
Relabeled /home/wwwroot from unconfined_u:object_r:user_home_dir_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
Relabeled /home/wwwroot/index.html from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
10.4 个人用户主页功能
让系统内所有的用户在自己的家目录中管理个人的网站,在系统中为每位用户建立一个独立的网站
第1步:需要编辑下面的配置文件,然后在UserDir disabled参数前面加上井号(#),表示让httpd服务程序开启个人用户主页功能;同时再把UserDir public_html参数前面的井号(#)去掉(UserDir参数表示网站数据在用户家目录中的保存目录名称,即public_html目录)。
[root@bogon ~]# vim /etc/httpd/conf.d/userdir.conf
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
# UserDir disabled
#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disabled" line above, and uncomment
# the following line instead:
#
UserDir public_html
#
# Control access to UserDir directories. The following is an example
# for a site where these directories are restricted to read-only.
#
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
第2步:在用户家目录中建立用于保存网站数据的目录及首页面文件,把家目录的权限修改为755,保证其他人也有权限读取里面的内容。(我的个人用户是root1,根据你的用户来调节)
[root@bogon ~]# su - root1
Last login: Mon Dec 18 16:08:00 PST 2023 on tty2
[root1@bogon ~]$ mkdir weihongbin
[root1@bogon ~]$ echo "weihongbin" > weihongbin/index.html
[root1@bogon ~]$ chmod -R 755 /home/root1
第3步:重新启动httpd服务程序
[root1@bogon ~]$ exit
logout
[root@bogon ~]# systemctl restart httpd
第4步:SELinux域确保服务程序不能执行违规的操作,只能本本分分地为用户提供服务。httpd服务中突然开启的这项个人用户主页功能需要被SELinux域默认允许
使用getsebool命令查询并过滤出所有与HTTP协议相关的安全策略。off为禁止状态,on为允许状态。
[root@bogon ~]# getsebool -a | grep http
...
httpd_enable_homedirs --> off
...
在setsebool命令后面加上-P参数,让修改后的SELinux策略规则永久生效且立即生效。
[root@bogon ~]# setsebool -P httpd_enable_homedirs=on
在浏览器的地址栏中输入网址,其格式为“网址/~用户名”
(我这里报错了,原因很简单,我瞎起名字导致的,public_html不能修改,因为这是http识别的目录,需要跟配置文件一致)发现问题后进行修正
[root@bogon ~]# su - root1
Last login: Mon Dec 18 22:36:55 PST 2023 on pts/0
[root1@bogon ~]$ mv weihongbin public_html
[root1@bogon ~]$ ll
total 0
drwxr-xr-x. 2 root1 root1 6 Dec 18 16:08 Desktop
drwxr-xr-x. 2 root1 root1 6 Dec 18 16:08 Documents
drwxr-xr-x. 2 root1 root1 6 Dec 18 16:08 Downloads
drwxr-xr-x. 2 root1 root1 6 Dec 18 16:08 Music
drwxr-xr-x. 2 root1 root1 6 Dec 18 16:08 Pictures
drwxr-xr-x. 2 root1 root1 6 Dec 18 16:08 Public
drwxr-xr-x. 2 root1 root1 24 Dec 18 22:08 public_html
修改文件的上下文
[root@bogon ~]# semanage fcontext -a -t httpd_sys_content_t /home/root1/#修改文件的上下文信息
[root@bogon ~]# restorecon -Rv /home/root1 #使SELinux 安全上下文立即生效
Relabeled /home/root1/public_html from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_user_content_t:s0
Relabeled /home/root1/public_html/index.html from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_user_content_t:s0
个人主页加密
第1步:先使用htpasswd命令生成密码数据库。-c参数表示第一次生成;(自定义用户为weihongbin)
[root@bogon ~]# htpasswd -c /etc/httpd/passwd weihongbin
New password:
此处输入用于网页验证的密码
Re-type new password:
再输入一遍进行确认
Adding password for user weihongbin
第2步:继续编辑个人用户主页功能的配置文件。继续编辑个人用户主页功能的配置文件(加粗部分直接替换粘贴)。重启httpd服务程序
[root@bogon ~]# vim /etc/httpd/conf.d/userdir.conf
...
AllowOverride all
#刚刚生成出的密码验证文件保存路径
authuserfile "/etc/httpd/passwd"
#当用户访问网站时的提示信息
authname "My privately website"
#验证方式为口令模式
authtype basic
#访问网站时需要验证的用户名称
require user weihongbin
[root@bogon ~]# systemctl restart httpd
刷新后输入账号密码才能进入
10.5 虚拟网站主机功能
Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机域名或端口号,提供多个网站同时为外部提供访问服务的技术
10.5.1 基于IP地址
这个我们需要做三块网卡,分别对应10,11,12三个IP地址,这里我们来巩固一下我们网卡章节的知识,同时把网卡章节的内容进行梳理
此时我们的网卡配置信息是很乱的,这也是我们以后要整理的点,之前绑定的bond0合二为一后删掉了一个,现在应该是有很复杂的关系,不过不要着急我们一步一步来解除他,并且调成三个IP地址
先删除之前创建的合并网卡,此时我们应该无法再通过xshell登录虚拟机了,我们直接在虚拟机上操作
[root@bogon ~]# nmcli device status
DEVICE TYPE STATE CONNECTION
ens160 ethernet connected ens160
bond0 bond connected bond0
ens256 ethernet connected Wired connection 1
virbr0 bridge connected (externally) virbr0
ens224 ethernet connected bond0-port2
lo loopback unmanaged --
virbr0-nic tun unmanaged --
[root@bogon ~]# nmcli connection delete bond0
Connection 'bond0' (433b5ce0-0cd3-44b2-9cd5-611d667cd7c9) successfully deleted.
现在通过ifconfig发现目前是三块网卡,只是网卡配置的ip地址不太对,此时我们先调整ens160的,使其网卡信息变更为10(本来有的信息就别动,没有的进行填充,配置文件内容如下)
[root@bogon ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens160
UUID=a3e2d19b-0640-429b-8be8-6f4586ea29b1
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.227.10
NETMASK=255.255.255.0
GATEWAY=192.168.227.2
DNS1=192.168.227.1
DNS2=8.8.8.8
PREFIX=24
ZONE=public
修改完一个后再把剩余两个网卡进行整理
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ll
total 12
-rw-r--r--. 1 root root 121 Dec 10 23:11 ifcfg-bond0-port1
-rw-r--r--. 1 root root 121 Dec 10 23:11 ifcfg-bond0-port2
-rw-------. 1 root root 370 Dec 19 00:29 ifcfg-ens160
删除这两个多余的文件,ifcfg-bond0-port1和ifcfg-bond0-port2,我们来复制两个ifconfig-ens224和ifconfig-ens256文件
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# rm -rf ifcfg-bond0-port1
[root@localhost network-scripts]# rm -rf ifcfg-bond0-port2
[root@localhost network-scripts]# cp -R ifcfg-ens160 ifcfg-ens224
[root@localhost network-scripts]# cp -R ifcfg-ens160 ifcfg-ens256
修改224配置文件
[root@localhost network-scripts]# vim ifcfg-ens224
YPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens224
DEVICE=ens224
ONBOOT=yes
IPADDR=192.168.227.11
NETMASK=255.255.255.0
GATEWAY=192.168.227.2
DNS1=192.168.227.1
DNS2=8.8.8.8
PREFIX=24
ZONE=public
修改256配置文件
[root@localhost network-scripts]# vim ifcfg-ens256
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens256
DEVICE=ens256
ONBOOT=yes
IPADDR=192.168.227.12
NETMASK=255.255.255.0
GATEWAY=192.168.227.2
DNS1=192.168.227.1
DNS2=8.8.8.8
PREFIX=24
ZONE=public
重启网络管理服务
[root@localhost network-scripts]# systemctl restart NetworkManager
此时我们发现256的配置不太对,查看一下网卡相关情况,删除一下 Wired connection 1的默认配置信息
[root@localhost network-scripts]# nmcli device status
DEVICE TYPE STATE CONNECTION
ens160 ethernet connected ens160
ens224 ethernet connected ens224
ens256 ethernet connected Wired connection 1
virbr0 bridge connected (externally) virbr0
lo loopback unmanaged --
virbr0-nic tun unmanaged --
[root@localhost network-scripts]# nmcli connection delete Wired\ connection\ 1
Connection 'Wired connection 1' (8e6c518e-8002-3421-90ef-9fbf342bfb48) successfully deleted.
然后再查看一下,发现已经正常使用了,学习要融会贯通,以往的知识要及时用起来
第1步:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录
[root@localhost ~]# mkdir -p /home/wwwroot/10
[root@localhost ~]# mkdir -p /home/wwwroot/11
[root@localhost ~]# mkdir -p /home/wwwroot/12
[root@localhost ~]# echo "10" > /home/wwwroot/10/index.html
[root@localhost ~]# echo "11" > /home/wwwroot/11/index.html
[root@localhost ~]# echo "12" > /home/wwwroot/12/index.html
第2步:从httpd服务的配置文件中分别追加写入3个基于IP地址的虚拟主机网站参数(加粗为新增),重启httpd服务
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
...
<Directory "/home/wwwroot">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
<VirtualHost 192.168.227.10>
DocumentRoot /home/wwwroot/10
ServerName www.weihongbin.com
<Directory /home/wwwroot/10>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.227.11>
DocumentRoot /home/wwwroot/11
ServerName www.weihongbin.com
<Directory /home/wwwroot/10>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.227.12>
DocumentRoot /home/wwwroot/12
ServerName www.weihongbin.com
<Directory /home/wwwroot/10>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
[root@localhost ~]# systemctl restart httpd
第3步:SELinux赋权,不想用selinux可以百度自行关闭
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
ValueError: File context for /home/wwwroot already defined
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/11
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/12
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/*
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/11/*
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/12/*
[root@localhost ~]# restorecon -Rv /home/wwwroot
Relabeled /home/wwwroot/10 from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
Relabeled /home/wwwroot/11 from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
Relabeled /home/wwwroot/12 from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
展示成果
10.5.2 基于主机域名
当服务器无法为每个网站都分配一个独立IP地址的时候,可以尝试让Apache自动识别用户请求的域名,只需要保证位于生产环境中的服务器上有一个可用的IP地址,网络参数中没有DNS信息也依然能够将域名解析为某个IP地址。
第1步:手动定义IP地址与域名之间对应关系的配置文件
[root@localhost ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.227.10 www.weihongbin.com www.weihongbin.cn www.weihongbin.net
[root@localhost ~]# ping -c 4 www.weihongbin.com
PING www.weihongbin.com (192.168.227.10) 56(84) bytes of data.
64 bytes from www.weihongbin.com (192.168.227.10): icmp_seq=1 ttl=64 time=0.047 ms
64 bytes from www.weihongbin.com (192.168.227.10): icmp_seq=2 ttl=64 time=0.047 ms
64 bytes from www.weihongbin.com (192.168.227.10): icmp_seq=3 ttl=64 time=0.051 ms
64 bytes from www.weihongbin.com (192.168.227.10): icmp_seq=4 ttl=64 time=0.070 ms
--- www.weihongbin.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3059ms
rtt min/avg/max/mdev = 0.047/0.053/0.070/0.013 ms
第2步:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录
[root@localhost ~]# mkdir -p /home/wwwroot/weihongbin.com
[root@localhost ~]# mkdir -p /home/wwwroot/weihongbin.cn
[root@localhost ~]# mkdir -p /home/wwwroot/weihongbin.net
[root@localhost ~]# echo "com" > /home/wwwroot/weihongbin.com/index.html
[root@localhost ~]# echo "cn" > /home/wwwroot/weihongbin.cn/index.html
[root@localhost ~]# echo "net" > /home/wwwroot/weihongbin.net/index.html
第3步:从httpd服务的配置文件中分别追加写入3个基于主机名的虚拟主机网站参数(加粗部分修改),重启httpd服务
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
<Directory "/home/wwwroot">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
<VirtualHost 192.168.227.10>
DocumentRoot /home/wwwroot/weihongbin.com
ServerName www.weihongbin.com
<Directory /home/wwwroot/weihongbin.com>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.227.10>
DocumentRoot /home/wwwroot/weihongbin.cn
ServerName www.weihongbin.cn
<Directory /home/wwwroot/weihongbin.com>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.227.10>
DocumentRoot /home/wwwroot/weihongbin.net
ServerName www.weihongbin.net
<Directory /home/wwwroot/weihongbin.com>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
[root@localhost ~]# systemctl restart httpd
第4步:SELinux赋权,不想用selinux可以百度自行关闭
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
ValueError: File context for /home/wwwroot already defined
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/weihongbin.com
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/weihongbin.com/*
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/weihongbin.cn
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/weihongbin.cn/*
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/weihongbin.net
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/weihongbin.net/*
[root@localhost ~]# restorecon -Rv /home/wwwroot
10.5.3 基于端口号
基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源。使用80、443、8080等端口号来提供网站访问服务是比较合理的,如果使用其他端口号则会受到SELinux服务的限制。
第1步:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录
[root@localhost ~]# mkdir -p /home/wwwroot/6111
[root@localhost ~]# mkdir -p /home/wwwroot/6222
[root@localhost ~]# mkdir -p /home/wwwroot/6333
[root@localhost ~]# echo "6111" > /home/wwwroot/6111/index.html
[root@localhost ~]# echo "6222" > /home/wwwroot/6222/index.html
[root@localhost ~]# echo "6333" > /home/wwwroot/6333/index.html
第2步:在httpd服务配置文件分别添加用于监听6111、6222和6333端口的参数,分别追加写入3个基于端口号的虚拟主机网站参数
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
...
#Listen 12.34.56.78:80
Listen 80
Listen 6111
Listen 6222
Listen 6333
...
<Directory "/home/wwwroot">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
<VirtualHost 192.168.227.10
:6111
>
DocumentRoot /home/wwwroot/
6111
ServerName www.weihongbin.com
<Directory /home/wwwroot/
6111
>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.227.10
:6222
>
DocumentRoot /home/wwwroot/
6222
ServerName
www.weihongbin.com
<Directory /home/wwwroot/
6222
>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.227.10
:6333
>
DocumentRoot /home/wwwroot/
6333
ServerName www.weihongbin.com
<Directory /home/wwwroot/
6333
>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
第3步:SELinux赋权,不想用selinux可以百度自行关闭
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
ValueError: File context for /home/wwwroot already defined
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/*
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222/*
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333/*
[root@localhost ~]# restorecon -Rv /home/wwwroot/
第4步:SELinux允许的与HTTP协议相关的端口号中默认没有包含6111、6222和6333,需要将这3个端口号手动添加进去,然后重启。
[root@localhost ~]# semanage port -a -t http_port_t -p tcp 6111
[root@localhost ~]# semanage port -a -t http_port_t -p tcp 6222
[root@localhost ~]# semanage port -a -t http_port_t -p tcp 6333
[root@localhost ~]# semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 6333, 6222, 6111, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[root@localhost ~]# systemctl restart httpd
10.6 Apache访问控制
Apache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。它通过Allow指令允许某个主机访问服务器上的网站资源,通过Deny指令实现禁止访问。在允许或禁止访问网站资源时,还会用到Order指令,这个指令用来定义Allow或Deny指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。
第1步:先在服务器上的网站数据目录中新建一个子目录
[root@localhost ~]# mkdir /var/www/html/server
[root@localhost ~]# echo "成功" > /var/www/html/server/index.html
第2步:打开httpd服务的配置文件,添加下述规则来限制源主机的访问(加粗部分,只有火狐可以访问)
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
...
#
DocumentRoot "/home/wwwroot"
DocumentRoot "/var/www/html/"
#
# Relax access to content within /var/www.
#
#
<Directory "/home/wwwroot/">
<Directory "/var/www/html/">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
...
<VirtualHost 192.168.227.10>
DocumentRoot /var/www/html
ServerName www.weihongbin.com
#
<Directory /home/wwwroot/weihongbin.com>
#
AllowOverride None
#
Require all granted
#
</Directory>
<Directory "/var/www/html/server">
SetEnvIf User-Agent "Firefox" ff=1
Order allow,deny
Allow from env=ff
</Directory>
</VirtualHost>
...
[root@localhost ~]# systemctl restart httpd
没有谷歌的话可以下载一个,火狐浏览器直接输入:google.cn/chrome/
找到包的地址,并安装
[root@localhost tmp]# cd /tmp
[root@localhost tmp]# dnf install -y google-chrome-stable_current_x86_64.rpm
再下载安装两个依赖包(作用不大,想卸载用dnf remove -y
)
[root@localhost ~]# dnf install -y lsb
[root@localhost ~]# dnf install -y libXScrnSaver
完成谷歌浏览器安装,重启一下(我这系统太垃圾了,安装了谷歌也用不了)
进行测试,其他的浏览器的也不用测,肯定进不去
二、巩固练习
1.什么是Web网络服务?
答:一种允许用户通过浏览器访问互联网中各种资源的服务。
2.相较于Nginx服务程序,Apache服务程序最大的优势是什么?
答:Apache服务程序具备跨平台特性、安全性,而且拥有快速、可靠、简单的API扩展。
3.httpd服务程序没有检查到首页文件,会提示报错信息吗?
答:不会,httpd服务在未找到网站首页文件时,会向访客显示一个默认页面。
4.简述Apache服务主配置文件中全局配置参数、区域配置参数和注释行信息的作用。
答:全局配置参数是一种全局性的配置参数,可作用于所有的子站点;区域配置参数则是单独针对每个独立的子站点设置的;而注释行信息一般是对服务程序的功能或某一行参数进行介绍的。
5.简述SELinux服务的作用。
答:为了让各个服务进程都受到约束,使其仅获取到本应获取的资源。
6.在使用getenforce命令查看SELinux服务模式时,发现其配置模式为permissive,这代表强制开启模式吗?
答:不是,强制开启模式是enforcing,而permissive是只发出警告而不强制拦截的模式。
7.在使用semanage命令修改了文件上应用的SELinux安全上下文后,还需要执行什么命令才可以让更改立即生效?
答:还需要执行restorecon命令即可让新的SELinux安全上下文参数立即生效。
8.要想查询并过滤出所有与HTTP协议相关的SELinux域策略有哪些,应该怎么做呢?
答:可以结合管道符来实现,即执行getsebool -a | grep http命令。
9.Apache服务程序可以基于哪些资源来创建虚拟主机网站呢?
答:可以基于IP地址、主机名(域名)或者端口号创建虚拟主机网站。
10.相对于基于IP地址和基于主机名(域名)配置的虚拟主机网站来说,使用端口号配置虚拟主机网站有哪些特点?
答:在使用端口号来配置虚拟主机网站时,必须要考虑到SELinux域对httpd服务程序所用端口号的控制策略,还要在httpd服务程序的主配置文件中使用Listen参数来开启要监听的端口号。
三、跋文
如果想上手操作的同学们可以通过阿里云ecs服务器免费试用参与或低价购买专属于自己的服务器入口如下↓↓↓↓↓
入口一:新老同学免费试用
入口二:上云第一站
入口三:学生版超低价云服务器
入口四:云服务器专享特惠版
入口五:云服务器特惠1.5折起
入口七:阿里云最新活动中心
入口八:中小企业权益满减礼包
说明:最后的链接只是想方便大家免费试用产品和找到最佳优惠政策。
学习是一件需要投入的事情,无论是精力、金钱、时间,每天花费1小时,坚持一年,你也能成为行业里的大牛。