Linux/Python学习论坛-京峰教育

 找回密码
 立即注册

一键登录:

搜索
热搜: 活动 交友 discuz
查看: 1334|回复: 0

apache虚拟主机详解

[复制链接]

203

主题

267

帖子

2295

积分

超级版主

Rank: 8Rank: 8

积分
2295
发表于 2015-3-21 23:02:44 | 显示全部楼层 |阅读模式
配置虚拟主机前的一些必备的开胃小菜:
1、2.2版本和2.4版本的关于开启虚拟主机的不同区别
apache2.2x系列的版本,需要启用一个指令NameVirtualHost来开启虚拟主机的功能
Apache2.4 不需要开启NameVirtualHost
2、定义站点的核心要素有哪些?
如在同一个物理主机上,提供了两个不同的站点,每一个站点应该独立具有的资源或者配置、甚至是信息应该有哪些?
(1)DocumentRoot
(2)ip地址
(3)ServerName ,每个主机都应该有主机名
(4)对于任何一个目录都应该封装一个<Directory></Directory>容器
(5)Alias 路径别名
(6) ServerAlias服务器别名
(7)Errorlog
(8)CustomLog
(9)<Location  "/images">
(10)ScriptsAlias 脚本别名
例子:
DocumentRoot  /www/test1.com/
<Directory   "/www/test1.com/">
options
AllowOVerrride
</Directory>
#Directory封装定义用户访问每一个本地文件系统目录下的文件该具有什么样的访问属性
#而Location则用来定义RUL
Alias
期望两个名称访问的是同一个主机,怎么办?ServerAlias,服务器端别名来解决
3、虚拟主机的定义,使用VirtualHost标签封装起来即可;要需要注意虚拟主机和中心主机不能同时使用,要使用虚拟主机首先得取消中心主机,注释中心主机的DocumentRoot即可
<VirtualHostHost>
指令1......
指令2......
</VirtualHost>
1)基于IP的Host的写法:ip:端口的格式即可
ip1:80
ip2:80
2)基于端口的Host的写法:
ip:80
ip:8080
3)基于域名的Host写法:
ip:80
*80#当前主机上每一个ip都监听
基于域名的ServerName一定是不同的

Apache虚拟主机的具体实现
1
1)首先需要取消中心主机




1
2
3
4
5
6
7
8
9
10
11
12
13
2)直接在httpd.conf里面添加VirutalHost标签对定义即可,或者在conf.d目录下新建文件virtual.conf文件也可以,这样将来管理起来更方便
[root@localhost ~]# vim /etc/httpd/conf.d/virtual.conf
服务器端代码实现:
#定义第一个虚拟主机
<VirtualHost 192.168.1.10:80>
        ServerName test1.com
        DocumentRoot "/data/html/test1"
</VirtualHost>
#定义第二个虚拟主机
<VirtualHost 192.168.1.11:80>
        ServerName test2.com
        DocumentRoot "/data/html/test2"
</VirtualHost>



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
30
31
32
33
34
35
36
37
38
1>创建测试目录文件
[root@localhost html]# mkdir /data/html/{test1,test2} -pv
mkdir: created directory `/data/html'
mkdir: created directory `/data/html/test1'
mkdir: created directory `/data/html/test2'
2>创建测试页面文件
[root@localhost test1]# echo "<h1>This is a test1 site </h1>">> index.html
[root@localhost test1]# cd ../test2
[root@localhost test2]# echo "<h1>This is a test2 site </h1>">> index.html
3>创建ip地址别名
[root@localhost test2]# ip addr add 192.168.1.11/24 dev eth0
[root@localhost test2]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:fb:17:2d brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.11/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fefb:172d/64 scope link
       valid_lft forever preferred_lft forever
4>测试ip别名的连通性
[root@localhost test2]# ping 192.168.1.11 -c 2
PING 192.168.1.11 (192.168.1.11) 56(84) bytes of data.
64 bytes from 192.168.1.11: icmp_seq=1 ttl=64 time=0.599 ms
64 bytes from 192.168.1.11: icmp_seq=2 ttl=64 time=0.067 ms
--- 192.168.1.11 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 0.067/0.333/0.599/0.266 ms
5>检查配置文件语法并重启服务
[root@localhost test2]# httpd -t
Syntax OK
[root@localhost test2]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
6>客户端测试





2、基于端口的虚拟主机的实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1>配置文件:<VirtualHost 192.168.1.11:8080>
        ServerName test3.com
        DocumentRoot "/data/html/test3"
</VirtualHost>
2>创建相关目录:
[root@localhost ~]# mkdir /data/html/test3 -pv
mkdir: created directory `/data/html/test3'
[root@localhost ~]# echo "<h1>This is a test3 website</h1>" >>index.html
3>重启服务
[root@localhost ~]# httpd -t
Syntax OK
[root@localhost ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
4>基于端口的虚拟主机要需要在httpd.conf主配置文件中指定




1
2
3
4
5
6
7
5>验证
[root@localhost ~]# httpd -t
Syntax OK
[root@localhost ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
6>客户端访问测试





3、基于主机名的虚拟主机的实现
1
2
3
4
5
6
7
8
9
10
NameVirtualHost 192.168.1.10:80
<VirtualHost 192.168.1.10:80>
        ServerName test4.com
        DocumentRoot "/data/html/test4"
</VirtualHost>
[root@localhost ~]# mkdir /data/html/test4
[root@localhost ~]# cd /data/html/test4
[root@localhost test4]# echo "<h1>This is  test4 web site</h1>" >index.html
在客户端设置基于/etc/hosts主机名的解析:
%SystemRoot%\system32\drivers\etc\





1
使用ip地址来访问,默认将返回基于名称主机的第一个






   补充扩展内容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
CustomLog  "/etc/httpd/conf/test1/access_log" combined
创建日志目录:
[root@localhost ~]# mkdir /etc/httpd/conf/test1 -pv
mkdir: created directory `/etc/httpd/conf/test1'
[root@localhost ~]# mkdir /etc/httpd/conf/test4 -pv
mkdir: created directory `/etc/httpd/conf/test4'
测试:
[root@localhost ~]# httpd -t
Syntax OK
[root@localhost ~]# service httpd restart
Stopping httpd:                                            [FAILED]
Starting httpd:                                            [  OK  ]
[root@localhost ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
客户端测试日志分析:
[root@localhost ~]# tail -f /etc/httpd/conf/test1/access_log
192.168.1.3 - - [20/Apr/2014:23:36:07 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"
192.168.1.3 - - [20/Apr/2014:23:36:07 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"
192.168.1.3 - - [20/Apr/2014:23:36:07 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"
192.168.1.3 - - [20/Apr/2014:23:36:07 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"
192.168.1.3 - - [20/Apr/2014:23:36:07 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"
192.168.1.3 - - [20/Apr/2014:23:36:08 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"
192.168.1.3 - - [20/Apr/2014:23:36:08 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"
192.168.1.3 - - [20/Apr/2014:23:36:08 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"
192.168.1.3 - - [20/Apr/2014:23:36:08 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"
192.168.1.3 - - [20/Apr/2014:23:36:08 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"
192.168.1.3 - - [20/Apr/2014:23:36:38 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"
定义test4.com下的/data/html/test4拒绝某个ip访问
13         <Directory "/data/html/test4">
14         options none
15         AllowOverride none
16         Order deny, allow
17         deny from 192.168.1.100
18         </Directory>



补充扩展内容2:基于虚拟主机的用户认证
1
2
3
4
5
6
7
8
9
10
只需要在Directory里面添加以下语句即可
<Directory>
Options none
AllowOverride AuthConfig
AuthType Basic
AuthName "Allow trust people"
AuthUserFile "/etc/httpd/.htpasswd"
Required User test1
Required  valid-user
<Directory>



附录:基于上文的所有配置文件及配置文件截图

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
1NameVirtualHost 192.168.1.10:80
2 #定义第一个虚拟主机
3<VirtualHost 192.168.1.10:80>
4         ServerName www.test1.com
5         DocumentRoot"/data/html/test1"
6         CustomLog  "/etc/httpd/conf/test1/access_log"combined
7</VirtualHost>
8
9<VirtualHost 192.168.1.10:80>
10        ServerName www.test4.com
11        DocumentRoot "/data/html/test4"
12        CustomLog "/etc/httpd/conf/test4/access_log" combined
13        <Directory "/data/html/test4">
14        options none
15        AllowOverride none
16        Order deny, allow
17        deny from 192.168.1.100
18        </Directory>
19</VirtualHost>
20
21 #定义第二个虚拟主机
22
23<VirtualHost 192.168.1.11:80>
24        ServerName www.test2.com
25        DocumentRoot "/data/html/test2"
26</VirtualHost>



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|京峰教育,只为有梦想的人 ( 京ICP备15013173号 )

GMT+8, 2020-2-25 10:13 , Processed in 0.027261 second(s), 12 queries , Redis On.

快速回复 返回顶部 返回列表