[toc]
12-linux安装布署web服务
一、网络相关命令
1、ping命令
作用:测试网络连通性
格式:ping [选项] 目标主机
常用选项:
-c
:count
,在发送(和接收)了正好数量为count
的回显应答分组后停止操作。-i
:wait
,在发送每个分组时等待wait
秒数。
示例1:查看本地虚拟主机ip是否能够网络连通
① 查看本本地虚拟主机的ip地址
C:\Users\fujinlong>ipconfig
………………省略部分输出………………
无线局域网适配器 WLAN:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::7c3a:2234:ca03:dd6a%21
IPv4 地址 . . . . . . . . . . . . : 192.168.31.88
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.31.1
② 查看是否连通
[root@localhost ~]# ping 192.168.31.88
PING 192.168.31.88 (192.168.31.88) 56(84) bytes of data.
64 bytes from 192.168.31.88: icmp_seq=1 ttl=128 time=0.569 ms
64 bytes from 192.168.31.88: icmp_seq=2 ttl=128 time=0.524 ms
64 bytes from 192.168.31.88: icmp_seq=3 ttl=128 time=0.364 ms
^Z
[2]+ 已停止 ping 192.168.31.88
停ping
命令,使用ctrl+z
停止。
示例2:查看百度地址是否能够连通,并设置在执行三次后退出,每次请求时间间隔为2
秒
命令:ping -c 3 -i 2 wwww.baidu.com
[root@localhost ~]# ping -c 3 -i 2 wwww.baidu.com
PING ps_other.a.shifen.com (110.242.68.66) 56(84) bytes of data.
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=1 ttl=128 time=17.1 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=2 ttl=128 time=16.9 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=3 ttl=128 time=17.3 ms
--- ps_other.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 16.990/17.180/17.376/0.157 ms
2、netstat命令
作用:查看系统的网络连接状态、路由表、接口统计等信息
格式:netstat [选项]
常用选项:
-a
:显示所有连线中的Socket
-p
:显示正在使用Socket
的进程识别码和程序名称-t
:显示tcp
传输协议的连线状况-l
:只显示正在侦听的套接字-n
:直接使用IP地址,不通过域名服务器
示例:查看TCP
网络连接信息
查看时,一般会将
anpt
参数组合使用。
[root@localhost ~]# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 845/rpcbind
tcp6 0 0 :::111 :::* LISTEN 845/rpcbind
………………省略部分输出………………
结果说明:
Proto
:协议名(tcp
协议还是udp
协议)recv-Q
:网络接收队列send-Q
:网路发送队列Local Address
:0.0.0.0:22
表示监听本地所有IPv4
地址的22
端口,:::22
表示监听本地所有IPv6
地址的22
端口Foreign Address
:与本机端口通信的外部socket
State
:链路状态PID/Program
:PID
即进程id
,Program
即使用该socket
的应用程序
3、route命令
作用:用于显示和操作IP路由表。
格式:route [选项]
常用选项参数:
-n
:不执行DNS反向查找,直接显示数字形式的ip地址-net
:到一个网络的路由表add
:增加路由记录。del
:删除路由记录。gw
:设置默认网关
示例1:添加和删除路由
语法格式:route {add | del } [-net] [网域或主机] netmask [网络掩码] [dev] 网卡名称
增加192.168.163.0
网段路由
[root@localhost ~]# route add -net 192.168.163.0 netmask 255.255.255.0 dev ens33
删除192.168.163.0
网段路由
[root@localhost ~]# route del -net 192.168.163.0 netmask 255.255.255.0 dev ens33
示例2:查看路由信息
语法格式:route -n
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.163.2 0.0.0.0 UG 100 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.163.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
说明:
Destination
:目标网络或目标主机。Destination
为default(0.0.0.0)
时,表示这个是默认网关,所有数据都发到这个网关。Gateway
:网关地址,0.0.0.0
表示当前记录对应的Destination
跟本机在同一个网段,通信时不需要经过网关。如果没有就显示星号(*
)。Genmask
:Destination
字段的网络掩码,Destination
是主机时需要设为255.255.255.255
,是默认路由时会设置为0.0.0.0
Flags
:标记U
:该路由可以使用H
:该路由是到一个主机G
:该路由是到一个网关(路由器),如果没有设置该标志,说明目的地 是直接相连的。!
:表示这个路由不会被接受
Metric
:路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的。Ref
:路由项引用次数Use
:路由项被路由软件查找的次数Iface
:网卡名称
示例3:添加/删除默认网关路由
语法格式:route {add | del } default gw {网关ip} {网卡名称}
增加
[root@localhost ~]# route add default gw 192.168.163.3 ens33
注意:增加默认路由时,不能增加
192.168.163.1
,这是虚拟机的ip地址,已被占用。
删除
[root@localhost ~]# route del default gw 192.168.163.3 ens33
注意:直接在命令行下执行
route
命令来添加路由,不会永久保存。当网卡重启或者机器重启之后,该路由就失效了。可以在/etc/rc.local
中添加route
命令来保证该路由设置永久有效。
4、traceroute命令
作用:命令用于追踪数据包在网络上的传输时的全部路径。traceroute
通过发送ICMP
的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute
要测3
次。输出结果中包括每次测试的时间(ms
)和设备的名称(如有的话)及其ip地址。
格式:traceroute -I 目标地址
-I
:使用ICMP回应取代UDP资料信息
示例:追踪本地数据包到www.baidu.com
的传输路径
[root@localhost ~]# traceroute -I www.baidu.com
traceroute to www.baidu.com (110.242.68.4), 30 hops max, 60 byte packets
1 gateway (192.168.163.3) 0.138 ms 0.078 ms 0.058 ms
2 * * *
3 * * *
………………省略部分输出………………
14 110.242.68.4 (110.242.68.4) 19.570 ms 19.514 ms 19.561 ms
注:在window使用
tracert
命令进行跟踪。
5、nslookup命令
作用:测试DNS域名解析
格式:nslookup 目标主机地址 [DNS服务器地址]
示例:测试百度
[root@localhost ~]# nslookup www.baidu.com
Server: 223.5.5.5
Address: 223.5.5.5#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 110.242.68.4
Name: www.a.shifen.com
Address: 110.242.68.3
二、tar命令
tar
命令可以为linux
的文件和目录创建档案。利用·tar·,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。
简单来说,tar命令就是压缩打包与解压缩,是命令行下的一个解压缩工具。
tar
常用的就是针对.gz、.bz类型的软件包进行解压安装。
语法格式:tar [选项] [文件或目录]
常用选项:
-c
:建立新的备份文件-f
:指定备份文件-x
:从归档文件中提取文件z
:通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz-v
:显示指令执行过程
示例1:将test
目录下的所有.txt
文件打包成txt.tar包,并以gzip
压缩。
命令:tar -zcvf all.tar.zp *.txt
[root@localhost test]# tar -zcvf all.tar.zp *.txt
a.txt
b.txt
c.txt
[root@localhost test]# ls
all.tar.zp a.txt b.txt c.txt
示例2:将test
目录下的所有.txt
文件打包成txt.tar包,并以gzip
压缩,完成后删除原有文件。
命令:tar -zcvf all.tar.zp *.txt --remove-files
[root@localhost test]# tar -zcvf all.tar.zp *.txt --remove-files
a.txt
b.txt
c.txt
[root@localhost test]# ls
all.tar.zp
示例3:解压缩all.tar.zp
命令:tar -zxvf all.tar.zp
[root@localhost test]# tar -zxvf all.tar.zp
a.txt
b.txt
c.txt
[root@localhost test]# ls
all.tar.zp a.txt b.txt c.txt
解压后删除原文件
[root@localhost test]# tar -zxvf all.tar.zp && rm -rf all.tar.zp
a.txt
b.txt
c.txt
[root@localhost test]# ls
a.txt b.txt c.txt
三、使用Apache服务部署静态网页
1、网站服务程序
网站服务就是Web网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务。
Web
网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的Web
服务器会通过HTTP
(超文本传输协议)或HTTPS
(安全超文本传输协议)把请求的内容传送给用户。
目前能够提供Web
网络服务的程序有IIS
、Nginx
和Apache
和tomcat
等。
其中Nginx
和Apache
和tomcat
都具有跨平台的特性。
2、安装Apache
并启动
① 安装
命令:yum -y install httpd
注意:使用yum
命令安装Apache
,跟在命令后面的Apache服务的软件包名称为httpd。如果直接执行yum install apache
命令,则系统会报错。
[root@localhost ~]# yum -y install httpd
………………省略部分输出………………
作为依赖被安装:
apr.x86_64 0:1.4.8-7.el7 apr-util.x86_64 0:1.5.2-6.el7
httpd-tools.x86_64 0:2.4.6-97.el7.centos mailcap.noarch 0:2.1.41-2.el7
完毕!
② 启动
命令:systemctl start httpd
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since 日 2021-02-21 11:37:28 CST; 16s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 65163 (httpd)
………………省略部分输出………………
在游览器输入localhost
或者ip
访问,默认端口为80
将服务加入开机启动:
命令:systemctl enable httpd
如果需要外部防问,需将80端口开放。
命令:firewall-cmd --add-port=80/tcp --permanent
设置完成重启防火墙。
命令:firewall-cmd --reload
3、配置服务文件参数
在Linux系统中配置服务,其实就是修改服务的配置文件。
| 作用 | 文件名称 |
| ———— | ————————– |
| 服务目录 | /etc/httpd |
| 主配置文件 | /etc/httpd/conf/httpd.conf |
| 网站数据目录 | /var/www/html |
| 访问日志 | /var/log/httpd/access_log |
| 错误日志 | /var/log/httpd/error_log |
在httpd
服务程序的主配置文件中,可以针对服务目录,监听端口,网站数据目录等进行全局配置。具体参数说明如下:
| 参数 | 作用 |
| ————– | ————————- |
| ServerRoot | 服务目录 |
| ServerAdmin | 管理员邮箱 |
| User | 运行服务的用户 |
| Group | 运行服务的用户组 |
| ServerName | 网站服务器的域名 |
| DocumentRoot | 网站数据目录 |
| Listen | 监听的IP地址与端口号 |
| DirectoryIndex | 默认的索引页页面 |
| ErrorLog | 错误日志文件 |
| CustomLog | 访问日志文件 |
| Timeout | 网页超时时间,默认为300秒 |
3.1、布署静态网页
① 创建网页
命令:echo "你好,欢迎使用Apache服务" >> /var/www/html/index.html
② 打开火狐查看网页
命令:firefox localhost
3.2、改变数据目录
问题:在默认情况下,网站数据是保存在/var/www/html
目录中,而如果想把保存网站数据的目录修改为/home/wwwroot
目录?
① 建立网站数据的保存目录,并创建首页文件
创建目录
命令:mkdir /home/wwwroot
创建首页文件
命令:echo "你好,欢迎使用Apache服务" >> /home/wwwroot/index.html
② 在httpd服务主配置文件中进行配置
将约第119
行用于定义网站数据保存路径的参数DocumentRoot
修改为/home/wwwroot
,同时还需要将约第124
行用于定义目录权限的参数Directory
后面的路径,以及第131
行的Directory
也修改为/home/wwwroot
。
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
………………省略部分输出………………
120 DocumentRoot "/home/wwwroot"
121 <Directory "/home/wwwroot">
122 AllowOverride None
123 Require all granted
124 </Directory>
………………省略部分输出………………
:wq 未行模式输入wq保存退出
③ 重新启动服务并验证效果
重启服务
命令:systemctl restart httpd
验证效果
命令:firefox localhost
结果执行的是Apache
首页。
访问localhost/index.html
验证
出现您没有权限访问这个服务器上的/index.html的错误提示。
原因?
SELinux安全策略引起的问题。
4、SELinux安全子系统
SELinux
(Security-Enhanced Linux
)是美国国家安全局在Linux
开源社区的帮助下开发的一个强制访问控制(MAC,Mandatory Access Control
)的安全子系统。Centos
系统使用SELinux
技术的目的是为了让各个服务进程都受到约束,使其仅获取到本应获取的资源。
4.1、配置模式
SELinux
服务有三种配置模式:
enforcing
:强制启用安全策略模式,将拦截服务的不合法请求。permissive
:遇到服务越权访问时,只发出警告而不强制拦截。disabled
:对于越权的行为不警告也不拦截。
强列建议使用强制启用安全策略模式
。
4.2、修改配置模式
SELinux服务配配置文件所在目录/etc/selinux/config
[root@localhost ~]# vim /etc/selinux/config
………………省略部分输出………………
7 SELINUX=enforcing
8 # SELINUXTYPE类型:
9 # targeted - 保护目标进程,
10 # minimum - 目标政策的修改。只对选中的进程进行保护
11 # mls - 多级安全保护
12 SELINUXTYPE=targeted
修改配置模式后不会立即生效,需要重启系统后生效。
查看当前模式:
命令:getenforce
[root@localhost ~]# getenforce
Enforcing
临时修改运行模式:0为禁用,1为启用
命令:setenforce 模式
禁用SElinux
服务,并访问网页
已能正常访问。
注意:使用setenfore
设置后,重启系统后还原原有的设置。
4.3、问题分析
httpd
服务程序的功能是允许用户访问网站内容。因此SELinux
肯定会默认放行用户对网站的请求操作。
我们将将网站数据的默认保存目录修改为了/home/wwwroot/
,而home
目录是用来存放普通用户的家目录数据的,而现在,httpd
提供的网站服务却要去获取普通用户家目录中的数据了,这显然违反了SELinux
的监管原则。
解决方案:
① 分别查看原始网站数据的保存目录与当前网站数据的保存目录是否拥有不同的SELinux
安全上下文值
命令:ls -Zd 目录
选项:
-Z
: 打印文件的安全上下文-d
:当遇到目录时列出目录本身而非目录内的文件
[root@localhost ~]# ls -Zd /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
[root@localhost ~]# ls -Zd /home/wwwroot
drwxr-xr-x. root root unconfined_u:object_r:home_root_t:s0 /home/wwwroot
文件上设置的SELinux
安全上下文是由用户段
、角色段
以及类型段
等多个信息项共同组成的。
system_u
:用户段,代表系统进程的身份object_r
:角色段,代表文件目录的角色httpd_sys_content_t
:类型段,代表网站服务的系统文件
② 使用semanage
命令设置文件目录安全上下文
semanage
命令作用:管理SELinux的策略
命令格式:semanage [选项] [文件]
常用的选项:
-l
:参数用于查询;-a
:参数用于添加;-m
:参数用于修改;-d
:参数用于删除。
示例:向新的网站数据目录中新添加一条SELinux
安全上下文,让这个目录以及里面的所有文件能够被httpd
服务程序所访问到。
命令:
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*
执行完上面命令还无法立即生效,需要使用restorecon
命令使设置生效。在使用restorecon
命令时,可以加上-Rv
参数对指定的目录进行递归操作,以及显示SELinux
安全上下文的修改过程。
命令:restorecon -Rv /home/wwwroot/
[root@localhost ~]# restorecon -Rv /home/wwwroot
restorecon reset /home/wwwroot context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/wwwroot/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
[root@localhost ~]# ls -Zd /home/wwwroot
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /home/wwwroot
③ 再次刷新页面,正常访问首页
5、个人用户主页功能
httpd
服务程序提供了个人用户主页功能,该功能可以让系统内所有的用户在自己的家目录中管理个人的网站。
5.1、个人用户主页功能实现
① 启用个人用户主页功能
编辑配置文件/etc/httpd/conf.d/userdir.conf
:
- 在
UserDir disabled
加上#
号,表示启用功能 - 去掉
UserDir public_html
注释,表示用户家目录中保存的目录名称。
[root@localhost ~]# vim /etc/httpd/conf.d/userdir.conf
<IfModule mod_userdir.c>
#UserDir disabled
UserDir public_html
</IfModule>
② 切换用户,在用户家目录创建保存网站数据的目录及首页文件,还需要设置家目录的权限修改为755,保证其它人也有权限读取里面的内容
[root@localhost home]# su tiger
[tiger@localhost ~]$ mkdir public_html
[tiger@localhost ~]$ echo "你好,欢迎访问`whoami`的网页" >> ./public_html/index.html
[tiger@localhost ~]$ chmod -Rf 755 /home/tiger
③ 重新启动httpd服务程序,输入地址访问网页,格式为:网址/~用户名
出现报错页面,与前面示例一样,还是SELinux安全策略问题。
④ 使用getsebool
命令查询并过滤出所有与HTTP协议相关的安全策略,其中,off为禁止状态,on为允许状态。
命令:getsebool -a | grep httpd
[root@localhost ~]# getsebool -a | grep httpd_enable_homedirs
httpd_enable_homedirs --> off
SELinux域安全策略规则很多,没有必要逐个理解,如果相要开记httpd服务的个人用户主页功能,只需要设置httpd_enable_homedirs
为开启状态即可。
⑤ 使用setsebool
命令设置httpd_enable_homedirs
为开启状态
命令:setsebool -P httpd_enable_homedirs=on
⑥ 刷新网页查看
5.2、设置个人用户主页通过认证访问
① 使用htpasswd
命令生成密码数据库,分别添加密码数据库的存放文件,以及验证要用到的用户名称
命令格式:htpasswd -c /etc/httpd/passwd 用户名
-c
:创建一个加密文件
[root@localhost ~]# htpasswd -c /etc/httpd/passwd tiger
New password: # 此处输入用于网页验证的密码
Re-type new password: # 再次确认密码
Adding password for user tiger
② 编辑个人用户主页功能的配置文件/etc/httpd/conf.d/userdir.conf
[root@localhost ~]# vim /etc/httpd/conf.d/userdir.conf
<Directory "/home/*/public_html">
AllowOverride all
#刚刚生成出来的密码验证文件保存路径
authuserfile "/etc/httpd/passwd"
#当用户尝试访问个人用户网站时的提示信息
authname "my private website"
authtype basic
#用户进行账户密码登录时需要验证的用户名称
Require user tiger
</Directory>
③ 重新加载配置文件并重启httpd
服务,然后刷新页面
重新加载配置
systemctl reload httpd
重启服务
systemctl restart httpd
刷新页面
输入用户名密码进行登录,密码为是htpasswd
命令生成的专门用于网站登录的口令密码,而不是系统中的用户密码。
6、虚拟网站主机功能
利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。
Apache
的虚拟主机功能是服务器基于用户请求的不同IP地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术。
在做每个实验之前请先将虚拟机还原到最初始状态,以免多个实验之间相互产生冲突。
6.1、 基于IP地址
如果一台服务器有多个IP
地址,而且每个IP
地址与服务器上部署的每个网站一一对应,这样当用户请求访问不同的IP地址时,会访问到不同网站的页面资源。
① 增加虚拟服务器主机的ip地址
拷贝/etc/sysconfig/network-scripts/
目录下的ifcfg-ens33
文件,分别命名ifcfg-ens33:0
、ifcfg-ens33:1
[root@localhost home]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33:0
[root@localhost home]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33:1
[root@localhost ~]# ls -l /etc/sysconfig/network-scripts/
总用量 260
-rw-r--r--. 1 root root 511 2月 17 00:14 ifcfg-ens33
-rw-r--r--. 1 root root 511 2月 21 15:37 ifcfg-ens33:0
-rw-r--r--. 1 root root 511 2月 21 15:37 ifcfg-ens33:1
………………省略部分输出………………
修改两个网卡配置文件内容如下:
ifcfg-ens33:0
### 不变的内容省略
NAME="ens33:0"
UUID="0720bf0a-e3f3-406d-9ebd-f7c44b53c888"
DEVICE="ens33:0"
ONBOOT="yes"
IPADDR="192.168.163.138"
GATEWAY="192.168.163.2"
DNS1="223.5.5.5"
ifcfg-ens33:1
### 不变的内容省略
NAME="ens33:1"
UUID="0720bf0a-e3f3-406d-9ebd-f7c44b53c888"
DEVICE="ens33:1"
ONBOOT="yes"
IPADDR="192.168.163.139"
GATEWAY="192.168.163.2"
DNS1="223.5.5.5"
② 重启网卡,使用ping
命令检查网络连通性,确保三个ip
地址均可正常访问
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ping -c 2 192.168.163.138
PING 192.168.163.138 (192.168.163.138) 56(84) bytes of data.
64 bytes from 192.168.163.138: icmp_seq=1 ttl=64 time=0.065 ms
64 bytes from 192.168.163.138: icmp_seq=2 ttl=64 time=0.083 ms
--- 192.168.163.138 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.065/0.074/0.083/0.009 ms
[root@localhost ~]# ping -c 2 192.168.163.139
PING 192.168.163.139 (192.168.163.139) 56(84) bytes of data.
64 bytes from 192.168.163.139: icmp_seq=1 ttl=64 time=0.095 ms
64 bytes from 192.168.163.139: icmp_seq=2 ttl=64 time=0.123 ms
--- 192.168.163.139 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.095/0.109/0.123/0.014 ms
③ 分别在/home/wwwroot
目录中创建用于保存不同网站数据的3
个目录,并创建各自的网站首页文件
[root@localhost home]# mkdir -p /home/wwwroot/137
[root@localhost home]# mkdir -p /home/wwwroot/138
[root@localhost home]# mkdir -p /home/wwwroot/139
[root@localhost home]# echo "IP:192.168.163.137" > /home/wwwroot/137/index.html
[root@localhost home]# echo "IP:192.168.163.138" > /home/wwwroot/138/index.html
[root@localhost home]# echo "IP:192.168.163.139" > /home/wwwroot/139/index.html
④ 在httpd
服务的配置文件/etc/httpd/conf/httpd.conf
中大约113行处,分别追加三个基于IP地址的虚拟主机网站参数,保存后重启httpd
服务
<VirtualHost 192.168.163.137>
DocumentRoot /home/wwwroot/137
ServerName www.tiger.com
<Directory "/home/wwwroot/137">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
# 其它两个省略
⑤ 分别请求不同的ip地址查看结果
注意:如果出现httpd服务程序的默认首页,则还是
SELinux
安全策略问题,可参照前面示例解决。
6.2、 基于主机域名
当服务器无法为每个网站都分配一个独立IP
地址的时候,可以尝试让Apache
自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。
① 配置/etc/hosts
进行域名与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.163.137 www.tiger.com bbs.tiger.com tech.tiger.com
② 分别在/home/wwwroot
中创建用于保存不同网站数据的三个目录,并向其中分别写入网站的首页文件。
[root@localhost home]# mkdir -p /home/wwwroot/www
[root@localhost home]# mkdir -p /home/wwwroot/bbs
[root@localhost home]# mkdir -p /home/wwwroot/tech
[root@localhost home]# echo "www.tiger.com" > /home/wwwroot/www/index.html
[root@localhost home]# echo "bbs.tiger.com" > /home/wwwroot/bbs/index.html
[root@localhost home]# echo "tech.tiger.com" > /home/wwwroot/tech/index.html
③ 在httpd
服务的配置文件/etc/httpd/conf/httpd.conf
中大约113行处开始,分别追加写入三个基于主机名的虚拟主机网站参数,保存后重启httpd服务
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
<VirtualHost 192.168.163.137>
DocumentRoot /home/wwwroot/www
ServerName www.tiger.com
<Directory "/home/wwwroot/www">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.163.137>
DocumentRoot /home/wwwroot/bbs
ServerName bbs.tiger.com
<Directory "/home/wwwroot/bbs">
………………省略部分内容………………
</Directory>
</VirtualHost>
<VirtualHost 192.168.163.137>
DocumentRoot /home/wwwroot/tech
ServerName tech.tiger.com
<Directory "/home/wwwroot/tech">
………………省略部分内容………………
</Directory>
</VirtualHost>
④ 分别请求不同的域名地址查看结果
6.3、基于端口号
基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源。
① 分别在/home/wwwroot
中创建用于保存不同网站数据的两个目录,并向其中分别写入网站的首页文件。
[root@localhost home]# mkdir -p /home/wwwroot/6111
[root@localhost home]# mkdir -p /home/wwwroot/6222
[root@localhost home]# echo "port:6111" > /home/wwwroot/6111/index.html
[root@localhost home]# echo "port:6222" > /home/wwwroot/6222/index.html
② 在httpd
服务的配置文件/etc/httpd/conf/httpd.conf
中大约44行处开始,分别追加用于监听6111
和6222
端口参数
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
………………省略部分内容………………
Listen 80
Listen 6111
Listen 6222
③ 在httpd
服务的配置文件/etc/httpd/conf/httpd.conf
中大约113行处开始,分别追加写入两个基于端口号的虚拟主机网站参数,保存后重启httpd服务
<VirtualHost 192.168.163.137:6111>
DocumentRoot /home/wwwroot/6111
ServerName www.tiger.com
<Directory "/home/wwwroot/6111">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.163.137:6222>
DocumentRoot /home/wwwroot/6222
ServerName bbs.tiger.com
<Directory "/home/wwwroot/6222">
………………省略部分内容………………
</Directory>
</VirtualHost>
重启httpd服务报错
[root@localhost ~]# 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.
虽然配置httpd
服务程序和SELinux
安全上下文,但SELinux
服务检测到6111
和6222
端口原本不属于Apache
服务应该需要的资源,但现在却以httpd
服务程序的名义监听使用了,所以SELinux
会拒绝Apache
服务使用这两个端口。
可使用semanage port -l | grep http
查看所有与HTTP
协议相关且SELinux
服务允许的端口列表。
[root@localhost ~]# semanage port -l | grep http_port_t
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
④ 将6111
和6222
端口加入到SELinux
允许的与HTTP
协议相关的端口号中,重启httpd服务
[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 -l | grep http_port_t
http_port_t tcp 6222, 6111, 80, 81, 443, 488, 8008, 8009, 8443, 9000
④ 分别请求不同的域名地址查看结果
6.4、Apache的访问控制
Apache可以基于源主机名、源IP
地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。
通过Allow
指令允许某个主机访问服务器上的网站资源,通过Deny
指令实现禁止访问。在允许或禁止访问网站资源时,还会用到Order
指令。这个指令用来定义Allow
或Deny
指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。
例如:Order Allow,Deny
:表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求。
6.4.1、匹配源主机的浏览器访问
① 在服务器网站数据目录中新建一个子目录,并且创建一个包含Successful
单词的首页
[root@localhost ~]# mkdir /var/www/html/server
[root@localhost ~]# echo "Successful" > /var/www/html/server/index.html
② 在httpd
服务的配置文件/etc/httpd/conf/httpd.conf
中大约129行后面添加规则:允许使用FireFox游览器的主机访问服务器上的首页,除此之外的所有请求将被拒绝
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/server">
SetEnvIf User-Agent "Firefox" ff=1
Order allow,deny
Allow from env=ff
</Directory>
………………省略部分输出………………
③ 重启后使用火狐游览器测试
使用其它游览器
[root@localhost ~]# curl localhost/server
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /server
on this server.</p>
</body></html>
6.4.2、匹配源主机的IP地址进行访问控制
① 在httpd
服务的配置文件/etc/httpd/conf/httpd.conf
中大约129行后面添加规则:只允许IP地址为192.168.163.137的主机访问网站资源
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/server">
Order allow,deny
Allow from 192.168.163.137
</Directory>
………………省略部分输出………………
② 重启后测试
使用192.168.163.137
访问
使用其它主机ip
访问
作业
1、什么是Web网络服务?
答:一种允许用户通过浏览器访问到互联网中各种资源的服务。
2、尝试启动Apache服务,并且检查是否启动成功?
此道题前题为安装的Apache
服务,即httpd
服务,安装方式如下:
① 查看是否安装
rpm -eq httpd
② 安装httpd
yum install httpd
③ 启动服务
service httpd start
④ 查看服务是否启动
service httpd status
⑤ 重启服务
service httpd restart
⑥ 关闭服务
service httpd stop
3、使用已学命令杀死Apache的进程
① 查看使用ps -ef|grep httpd
或igrep httpd
或pidof httpd
查看apache
进程id
② 使用kill -9 pid
命令杀死进程
③ 使用killall apache|httpd
服务名称删除进程
4、httpd服务程序没有检查到首页文件,会提示报错信息吗?
答:不会,httpd服务在未找到网站首页文件时,会向访客显示一个默认页面。
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参数来开启要监听的端口号。