虚拟机配置apache虚拟主机服务

虚拟机配置apache虚拟主机服务

要求

练习利用Apache服务建立普通Web站点、基于主机和用户认证的访问控制。

  1. 使用本地yum源安装Apache软件
  2. Apache服务器IP地址为192.168.5.20,使用域名www.mednight420.com进行访问
  3. 网站根目录为/data/web_data
  4. 网站首页为index.html,内容是Welcome to 2019 Computer Network Application contest!
  5. 使用三种方式搭建虚拟主机

初探Apache

开启Apache服务

在自定义路径下配置服务服务

  1. 配置服务器ip

地址和vmnet8网卡网段一致,确保服务器和主机能互相ping通,此处使用的静态nat连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
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
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=18f70089-a907-4307-b6fe-9e3e8b339116
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.5.20
MASK=255.255.255.0
GATEWAY=192.168.5.1
~
~
~
"/etc/sysconfig/network-scripts/ifcfg-ens33" 18L, 341C

保存退出后,重启服务

1
2
[root@localhost ~]# service network restart
Restarting network (via systemctl): [ OK ]
  1. 挂载本地镜像

这个参数我之前配过了,centos7挂载本地镜像,这里就不说了。

1
2
[root@localhost ~]# mount /dev/cdrom /media/cdrom/
mount: /dev/sr0 is write-protected, mounting read-only
  1. 安装httpd服务
1
2
3
4
5
[root@localhost ~]# yum install httpd
...
Is this ok [y/d/N]: y
...
Complete!
  1. 配置防火墙
1
2
[root@localhost ~]# firewall-cmd --add-port=80/tcp
success
  1. 开启服务
1
[root@localhost ~]# systemctl start httpd
  1. 主机访问

打开浏览器,输入服务器ip地址,访问服务页面

至此,第一步完成。

服务文件配置参数

和apache相关的配置文件有

配置文件的名称 文件存放位置
服务目录 /etc/httpd
主配置文件 /etc/httpd/conf/httpd.conf
网站数据目录 /var/www/html
访问日志 /var/log/httpd/access_log
错误日志 /var/log/httpd/error_log

主要的参数配置在/etc/httpd/conf/httpd.conf,常见参数有

参数 用途
ServerRoot 服务目录
ServerAdmin 管理员邮箱
User 运行服务的用户
Group 运行服务的用户组
ServerName 网站服务器的域名
DocumentRoot 网站数据目录
Dorectory 网站数据目录的权限
Listen 监听的IP地址或者端口
DirectoryIndex 默认的索引页页面
ErrorLog 错误日志文件
CustomLog 访问日志文件
Timeout 网页超时时间,默认300秒

先备份配置文件

1
2
3
4
[root@localhost conf]# cd /etc/httpd/conf
[root@localhost conf]# ls
httpd.conf magic
[root@localhost conf]# cp httpd.conf httpd.conf.bak

vi配置文件

开启行号

1
2
3
4
5
6
7
[root@localhost conf]# vi httpd.conf
#
# This is the main Apache HTTP server configuration file. It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
...
:set number

使用特定域名访问

ServerName可以指定网站服务器域名

vi命令状态

1
/ServerName

跳转到

1
95 #ServerName www.example.com:80

i插入状态,修改为以下,保存退出

1
95 ServerName www.mednight420.com:80

由于服务器没有启用DNS解析,只能在主机hosts里自行添加本地静态解析了

windows的hosts路径在C:\Windows\System32\drivers\etc,末尾添加一行

1
192.168.5.20 www.mednight420.com

回到服务器,重启服务

1
[root@localhost conf]# systemctl restart httpd

来到主机用域名www.mednight420访问,成功

自定网站根目录和首页

网站根目录DocumentRoot

1
2
3
4
5
[root@localhost conf]# vi httpd.conf
/DocumentRoot
n
n
i

修改以下三处路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DocumentRoot "/data/web_data"
#
# Relax access to content within /var/www.
#
<Directory "/data/web_data">
AllowOverride None
# Allow open access:
Require all granted
</Directory>

# Further relax access to the default document root:
<Directory "/data/web_data">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.

建立网站指向的文件夹

重启服务,报错,可以使用httpd来检测参数配置的错误,此处提示未建立文件夹

1
2
3
4
5
6
7
8
[root@localhost conf]# 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.
[root@localhost conf]# httpd
AH00526: Syntax error on line 119 of /etc/httpd/conf/httpd.conf:
DocumentRoot '/data/web_data' is not a directory, or is not readable
[root@localhost conf]# mkdir -p /data/web_data
[root@localhost conf]# echo "Welcome to 2019 Computer Network Application contest" > /data/web_data/index.html
[root@localhost conf]# systemctl restart httpd

此时我们主机查看域名,发现仍然是原来的默认主页,这是因为SELinux安全子系统的限制

这里,可以使用selinux配置命令semanage对特定需要进行修改,但是最小化安装并没有这个命令,安装semanage

1
2
3
4
5
6
7
安装
[root@localhost conf]# yum install policycoreutils-python
端口添加-a,修改-m,删除-d,查找-l
[root@localhost www]# semanage port -a -t http_port -p tcp 10022
[root@localhost www]# semanage port -m -t http_port -p tcp 10022
查看端口状态
[root@localhost www]# semanage port -l | grep http

也可以采取一刀切方法

SElinux弱策略

1
[root@localhost conf]# setenforce 0

主机访问域名,发现已经可以了

配置虚拟主机

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

这里介绍三种方式,IP,域名和端口。

首先,请给当前状态拍一个快照,方便回到当前状态。快照命名“虚拟主机服务参数配置完毕”。

基于IP地址

两个虚拟IP地址分别为

  • 192.168.5.20

  • 192.168.5.21

  1. 添加IP地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@localhost conf]# vi /etc/sysconfig/network-scripts/ifcfg-ens33

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
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=18f70089-a907-4307-b6fe-9e3e8b339116
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.5.20
IPADDR1=192.168.5.21
MASK=255.255.255.0
GATEWAY=192.168.5.1
~
~
~
~
:wq

[root@localhost conf]# service network restart
Restarting network (via systemctl): [ OK ]

主机ping一下192.168.5.21,ping通继续

  1. 建立对应的网站文件

吸取到上次教训,先建文件再改配置。

1
2
3
4
[root@localhost conf]# mkdir -p /data/web_data/20
[root@localhost conf]# echo "this is the ip 20" > /data/web_data/20/index.html
[root@localhost conf]# mkdir -p /data/web_data/21
[root@localhost conf]# echo "this is the ip 21" > /data/web_data/21/index.html
  1. 改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@localhost conf]# vi /etc/httpd/conf/httpd.conf

:set number
113 shift+g
i

# 到113行,粘贴以下

<VirtualHost 192.168.5.20>
DocumentRoot /data/web_data/20
ServerName www.mednight420.com
<Directory /data/web_data/20>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

: 113,120 co 121

# 到121行,改为以下

<VirtualHost 192.168.5.21>
DocumentRoot /data/web_data/21
ServerName www.mednight420.com
<Directory /data/web_data/21>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

: wq
  1. 重启服务
1
[root@localhost conf]# systemctl restart httpd
  1. 主机访问192.168.5.20和192.168.5.21

拍个快照,存档“基于ip虚拟主机配置完毕”

基于域名

转到快照“虚拟主机服务参数配置完毕”。

两台虚拟主机的域名分别为

  1. 建立对应的网站文件
1
2
3
4
[root@localhost conf]# mkdir -p /data/web_data/20
[root@localhost conf]# echo "this is the 420" > /data/web_data/20/index.html
[root@localhost conf]# mkdir -p /data/web_data/21
[root@localhost conf]# echo "this is the 421" > /data/web_data/21/index.html
  1. 给主机添加第二域名21的DNS解析

打开powershell

1
2
cd C:\Windows\System32\drivers\etc
notepad hosts

末尾添加

1
192.168.5.20 www.mednight421.com
  1. 改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@localhost conf]# vi /etc/httpd/conf/httpd.conf

:set number
113 shift+g
i

# 到113行,粘贴以下

<VirtualHost 192.168.5.20>
DocumentRoot /data/web_data/20
ServerName www.mednight420.com
<Directory /data/web_data/20>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

: 113,120 co 121

# 到121行,改为以下

<VirtualHost 192.168.5.20>
DocumentRoot /data/web_data/21
ServerName www.mednight421.com
<Directory /data/web_data/21>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

: wq
  1. 重启服务
1
[root@localhost conf]# systemctl restart httpd
  1. 主机访问www.mednight420.com和www.mednight421.com

拍个快照,存档“基于域名虚拟主机配置完毕”

基于端口

转到快照“虚拟主机服务参数配置完毕”。

两台虚拟主机的ip+port分别为

  • 192.168.5.20:6420

  • 192.168.5.20:6421

  1. 建立对应的网站文件
1
2
3
4
[root@localhost ~]# mkdir -p /data/web_data/20
[root@localhost ~]# echo "this is the port 6420" > /data/web_data/20/index.html
[root@localhost ~]# mkdir -p /data/web_data/21
[root@localhost ~]# echo "this is the port 6421" > /data/web_data/21/index.html
  1. 改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[root@localhost conf]# vi /etc/httpd/conf/httpd.conf

:set number
113 shift+g
i

# 到113行,粘贴以下

<VirtualHost 192.168.5.20:6420>
DocumentRoot /data/web_data/20
ServerName www.mednight420.com
<Directory /data/web_data/20>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

: 113,120 co 121

# 到121行,改为以下

<VirtualHost 192.168.5.20:6421>
DocumentRoot /data/web_data/21
ServerName www.mednight420.com
<Directory /data/web_data/21>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

# 添加端口监听 41行左右

/Listen

# Listen 12.34.56.78:80
Listen 80
Listen 6420
Listen 6421

: wq
  1. 防火墙开启端口
1
2
firewall-cmd --add-port=6420/tcp
firewall-cmd --add-port=6421/tcp
  1. 重启服务
1
[root@localhost conf]# systemctl restart httpd
  1. 主机访问192.168.5.20:6420和192.168.5.21:6421

拍个快照,存档“基于端口虚拟主机配置完毕”