[toc]

12-linux安装布署web服务

一、网络相关命令

1、ping命令

作用:测试网络连通性

格式:ping [选项] 目标主机

常用选项:

  • -ccount,在发送(和接收)了正好数量为count的回显应答分组后停止操作。
  • -iwait,在发送每个分组时等待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 Address0.0.0.0:22表示监听本地所有IPv4地址的22端口,:::22表示监听本地所有IPv6地址的22端口
  • Foreign Address:与本机端口通信的外部socket
  • State:链路状态
  • PID/ProgramPID即进程idProgram即使用该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:目标网络或目标主机。Destinationdefault(0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关。
  • Gateway:网关地址,0.0.0.0表示当前记录对应的 Destination跟本机在同一个网段,通信时不需要经过网关。如果没有就显示星号(*)。
  • GenmaskDestination字段的网络掩码,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网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务。

image

Web网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的Web服务器会通过HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户。

目前能够提供Web网络服务的程序有IISNginxApachetomcat等。

其中NginxApachetomcat都具有跨平台的特性。

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
image

将服务加入开机启动:

命令: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

image

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

image

结果执行的是Apache首页。

访问localhost/index.html验证

image

出现您没有权限访问这个服务器上的/index.html的错误提示。

原因?

SELinux安全策略引起的问题。

4、SELinux安全子系统

SELinuxSecurity-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服务,并访问网页

image

已能正常访问。

注意:使用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

③ 再次刷新页面,正常访问首页

image

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服务程序,输入地址访问网页,格式为:网址/~用户名

image

出现报错页面,与前面示例一样,还是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

⑥ 刷新网页查看

image

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

刷新页面

image

输入用户名密码进行登录,密码为是htpasswd命令生成的专门用于网站登录的口令密码,而不是系统中的用户密码。

6、虚拟网站主机功能

利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。

Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术。

image

在做每个实验之前请先将虚拟机还原到最初始状态,以免多个实验之间相互产生冲突。

6.1、 基于IP地址

如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一一对应,这样当用户请求访问不同的IP地址时,会访问到不同网站的页面资源。

① 增加虚拟服务器主机的ip地址

拷贝/etc/sysconfig/network-scripts/目录下的ifcfg-ens33文件,分别命名ifcfg-ens33:0ifcfg-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地址查看结果

image

注意:如果出现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>

④ 分别请求不同的域名地址查看结果

image

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行处开始,分别追加用于监听61116222端口参数

[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服务检测到61116222端口原本不属于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

④ 将61116222端口加入到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

④ 分别请求不同的域名地址查看结果

image

6.4、Apache的访问控制

Apache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。

通过Allow指令允许某个主机访问服务器上的网站资源,通过Deny指令实现禁止访问。在允许或禁止访问网站资源时,还会用到Order指令。这个指令用来定义AllowDeny指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。

例如: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>
………………省略部分输出………………

③ 重启后使用火狐游览器测试

image

使用其它游览器

[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访问

image

使用其它主机ip访问

image


作业

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 httpdigrep httpdpidof 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参数来开启要监听的端口号。

刚学java菜鸡,永劫无间蚀月,王者荣耀王者,金铲铲小铂金,第五人格菜鸡,原神开服玩家,星穹铁道菜鸡,崩坏的菜鸡,闪耀暖暖,和平精英,LOL,CSGO,以及三A大作收集者等等。。。