1.搭建基于IP的虚拟主机
1.1 首先将主配置文件中的DocumentRoot行注释掉,表示采用虚拟主机;
#DocumentRoot "/var/www/html"
1.2 在/etc/httpd/conf.d目录中新建一个virtual.conf文件,将虚拟主机的配置内容写入其中;因为该目录下所有的.conf文件也是被包含进主配置文件中的,所以可以这样做,当然也可以在主配置文件/etc/httpd/conf/httpd.conf中添加虚拟主机的配置信息;
[root@localhost conf.d]# vim virtual.conf
<VirtualHost 192.168.85.128:80>
ServerName />
DocumentRoot "/var/www/a"
</VirtualHost>
#在虚拟主机容器中可以根据需要添加其他的功能,为了实验能简单进行,所以没添加其他选项;
<VirtualHost 192.168.85.133:80>
ServerName />
DocumentRoot "/var/www/b"
</VirtualHost>
1.3 在/var/www目录下创建响应的目录
[root@localhost conf.d]# mkdir -pv /var/www/a
mkdir: created directory `/var/www/a'
[root@localhost conf.d]# mkdir -pv /var/www/b
mkdir: created directory `/var/www/b'
[root@localhost conf.d]# ll /var/www/
drwxr-xr-x 2 root root 4096 Aug 11 05:55 a
drwxr-xr-x 2 root root 4096 Aug 11 05:55 b
1.4 在两个目录中分别创建主页面
[root@localhost conf.d]# vim /var/www/a/index.html
<h1> />
[root@localhost conf.d]# vim /var/www/b/index.html
<h1> />
1.5 此时网卡上只有一个IP,需要再创建一个IP
[root@localhost conf.d]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:45:83:CE
inet addr:
192.168.85.128 Bcast:192.168.85.255 Mask:255.255.255.0
[root@localhost conf.d]#
ip address add 192.168.85.133/24 dev eth0
[root@localhost conf.d]#
ip address 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:45:83:ce brd ff:ff:ff:ff:ff:ff
inet 192.168.85.128/24 brd 192.168.85.255 scope global eth0
inet 192.168.85.133/24 scope global secondary eth0
inet6 fe80::20c:29ff:fe45:83ce/64 scope link
valid_lft forever preferred_lft forever
测试能否相互通信
[root@localhost conf.d]# ping 192.168.85.133
PING 192.168.85.133 (192.168.85.133) 56(84) bytes of data.
64 bytes from 192.168.85.133: icmp_seq=1 ttl=64 time=2.91 ms
64 bytes from 192.168.85.133: icmp_seq=2 ttl=64 time=0.139 ms
1.6 测试语法并重启服务测试
[root@localhost conf.d]# httpd -t
Syntax OK
[root@localhost conf.d]# service httpd restart
Stopping httpd: [ OK ]
[ OK ]
测试:
[root@localhost conf.d]#
elinks --dump />
/>
测试:
[root@localhost conf.d]# elinks --dump />
/>
2.搭建基于端口的虚拟主机
2.1 编辑虚拟主机的配置文件(也就是/etc/httpd/conf.d/virtual.conf),添加基于端口的虚拟主机的配置信息
现在既可以基于端口也可以基于IP
[root@localhost conf.d]# vim virtual.conf
<VirtualHost 192.168.85.128:80>
ServerName
DocumentRoot "/var/www/a"
</VirtualHost>
<VirtualHost 192.168.85.133:80>
ServerName />
DocumentRoot "/var/www/b"
</VirtualHost>
<VirtualHost 192.168.85.128:8080>
ServerName />
DocumentRoot "/var/www/aa"
</VirtualHost>
2.2 创建相应的目录和主页面
[root@localhost conf.d]# mkdir -pv /var/www/aa
mkdir: created directory `/var/www/aa'
[root@localhost conf.d]# vim /var/www/aa/index.html
<h1> />
2.3 在主配置文件中添加Listen 8080选项以保证能监听8080端口
Listen 80
Listen 8080
2.4 测试语法并重启服务测试
[root@localhost conf.d]# httpd -t
Syntax OK
[root@localhost conf.d]# service httpd restart
Stopping httpd: [ OK ]
[ OK ]
测试192.168.85.128:80
[root@localhost conf.d]# elinks --dump />
/>
测试192.168.85.128:8080
[root@localhost conf.d]# elinks --dump />
/>
3.基于名字的虚拟主机
在主配置文件中有NameVirtualHost *:80选项表示监听的所有主机可以使用基于名字的虚拟主机;因为此次不是在主配置文件配置,所以没有管它而是写在了虚拟主机的配置文件中;
3.1 编辑虚拟主机的配置文件为(此次只让IP为192.168.85.133使用)
[root@localhost conf.d]# vim virtual.conf
NameVirtualHost 192.168.85.133:80 #表示使用基于名字的虚拟主机
<VirtualHost 192.168.85.128:80>
ServerName />
DocumentRoot "/var/www/a"
</VirtualHost>
<VirtualHost 192.168.85.133:80>
ServerName
DocumentRoot "/var/www/b"
</VirtualHost>
<VirtualHost 192.168.85.128:8080>
ServerName />
DocumentRoot "/var/www/aa"
</VirtualHost>
<VirtualHost 192.168.85.133:80>
ServerName />
DocumentRoot "/var/www/bb"
</VirtualHost>
3.2 创建相应的目录和主页面
[root@localhost conf.d]# mkdir -pv /var/www/bb
mkdir: created directory `/var/www/bb'
[root@localhost conf.d]# vim /var/www/bb/index.html
<h1> />
3.3测试语法并重启服务测试测试
[root@localhost conf.d]# httpd -t
Syntax OK
[root@localhost conf.d]# service httpd restart
Stopping httpd: [ OK ]
[ OK ]
测试:
[root@localhost conf.d]# elinks --dump />
/>
这里显示 是因为符合基于名字的虚拟主机只有 和 ,named当用IP访问的时候回返回符合条件的第一个虚拟主机即 如果用其主机名访问那么会返回各自对应的结果;
而且,在Linux中用IP访问时用elinks命令可以访问而用主机名访问是却出现如下结果
[root@localhost conf.d]# elinks --dump http:// />
ELinks: Host not found
[root@localhost conf.d]# ping />
ping: unknown host />
原因很明显不必多说,所以接下来可以编辑/etc/hosts文件添加上其IP和主机名
[root@localhost conf.d]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.85.133 />
192.168.85.133 />
此时再测试
[root@localhost conf.d]# service httpd reload
Reloading httpd:
[root@localhost conf.d]# elinks --dump http:// />
/>
补充:以上我是在Linux上测试的,当然也可以在windows上用浏览器进行测试,前面基于IP和端口的都可以直接测试,这里只说基于名字的虚拟主机;
首先用浏览器测试时windows肯定是无法解析这些主机名的,所以需要再windows的hosts文件中添加上这些IP和对应的主机名才行
以我的windows为例,hosts文件是在这里的(如果找不到可以在C盘搜索hosts,而且该文件或存放的目录可能是隐藏的,记得打开显示隐藏文件选项):
找到后修改为(记得保存):
在浏览器上测试:
测试:
测试:
输入IP测试基于名字的虚拟主机的默认显示:
完成这些的时候可以在各种方法的虚拟主机上添加更多选项如CustomLog ErrorLog 和针对访问这些站点目录中文件的用户的访问控制授权等等
阅读(2152) | 评论(0) | 转发(0) |