前言:一些公司拥有多个网站,可是每个网站不可能在一台服务器上跑,因为成本太高了,然而虚拟主机可以解决该问题,虚拟主机使得一台服务器可以运行多个网站。而配置虚拟主机的方法有三种,分别是:基于
IP
地址不同端口的虚拟主机、基于不同
IP
地址的虚拟主机、基于域名的虚拟主机这三种,下面就对他们各自进行详述吧!
1.
检查是否安装了
Apache
的相关组件,同时关闭掉防火墙先(免得忘记,
^_^
)
,
截图如下:
2.
配置基于
IP
地址不同端口的虚拟主机:配置一台虚拟主机,其
Ip
地址为
192.168.10.100
,分别使用
8000
和
8080
端口,其
Web
站点的根目录分别为
/var/www/html/IP_8000
和
/var/www/html/IP_8080
。同时在
IP_8000
目录和
IP_8080
目录下分别建立
Index.html
文件,并分别在
Index.html
文件中添加一些内容。截图如下:
3.
查看一下网卡的
IP
地址,如果网卡的
Ip
地址不是我们所需要的那个
IP
地址的话,我们可以创建临时起作用的
IP
地址,输入命令“
ifconfig eth0 192.168.10.100 netmask 255.255.255.0”.
查看一下网卡
IP
地址截图如下:
4.
编辑
/etc/httpd/conf/httpd.conf
文件,设置其内容,在配置文件的最后面就是虚拟主机的设置,这里只截关键的图,截图如下:
架设同一
IP
地址不同端口的多个虚拟主机时,
Listen
参数值为端口号,而在
<VirtualHost IP
地址:端口号
>
语句块中,指定了
DocumentRoot
参数值就制定虚拟主机的站点目录。
6.
基于相同
IP
地址不同端口的虚拟主机测试成功。
7.
基于不同
IP
地址的虚拟主机:配置一台虚拟主机,其
Ip
地址分别是
192.168.10.100
和
192.168.10.196
,其
web
站点的根目录为
/var/www/html/IP_100
和
/var/www/html/IP_196.
并且在
IP_100
和
IP_196
两个目录下分别创建
Index.html
文件,并写入一些内容到
Index.html
文件中。截图如下:
8.
由于我的虚拟机上用了两块网卡,
eth0
的
IP
地址是
192.168.10.196
,另一块网卡
eth1
的
IP
地址是
192.168.10.100
,所以我就决定用着两块网卡来做实验,如果你只有一块网卡的话,那么你也不用着急怕做不了这个实验,因为
Linux
中的网卡支持虚拟子接口,所以使用“
ifconfig eth0:0 192.168.10.100”和“ifconfig eth0:1 192.168.10.196”就可以实现了,但是要让这些子接口有效的话,一定要保证eth0
这个网卡是启动有效的。由于我有两块网卡,所以我就用两块网卡做实验,截图如下:
9.
编辑
/etc/httpd/conf/httpd.conf
文件,设置其内容,在配置文件的最后面就是虚拟主机的设置,添加下面截图的内容,这里只截关键的图,截图如下:
11.
基于不同
IP
地址的虚拟主机测试成功
12.
基于域名的虚拟主机:配置一虚拟主机,其
IP
地址为
192.168.10.100
,设置两个虚拟主机,其域名分别是
product.redhat.com
和
service.redhat.com.(
注:由于我的
DNS
服务器已经搭建好了,用的域名是
redhat.com
,在这里我就不再做详细介绍,可以去看《
DNS
服务器的架设》这份文档,这里就把主区域和反向区域进行截图
)
。
我们在
/var/www/http/
目录下分别建立
Vhost_service
和
Vhost_product
目录,并分别在两个目录中创建
Index.html
文件,截图如下:
13.
创建
DNS
服务器的配置文件,输入命令“
vim /var/named/chroot/etc/named.conf
”,文件内容如下:
14.
编辑
redhat.com
这个域的正向区域文件,输入命令“
vi /var/named/chroot/var/named/yangzexin.redhat.com
”
,
编辑的内容如下,
product.redhat.com
和
service.redhat.com
与
IP
地址
192.168.10.100
的对应关系。
15.
编辑
redhat.com
这个域的反向区域文件,输入命令“
vi /var/named/chroot/var/named/192.168.10.in-addr.arpa
”
,
编辑的内容如下,
IP
地址
192.168.10.100
和域名
product.redhat.com
和
service.redhat.com
的对应关系。
16.
启动
named
守护进程,输入命令“
service named Start
”
17.
编辑
/etc/httpd/conf/httpd.conf
文件,添加内容如下,截图如下:
架设不同域名的多个虚拟主机是,
<VirtualHost IP
地址:端口号
>
语句块的
Servicename
参数值就是虚拟主机的域名,
DocumentRoot
参数值就是指定虚拟主机的站点目录。
18.
重启
httpd
守护进程,输入命令“
service httpd restart”
重启。
配置时出现的问题及解决方法有:
# service httpd start
问题一:配置apache多个虚拟主机以后,重启,出现以下错误提示:
[warn] NameVirtualHost *:80 has no VirtualHosts
原因:NameVirtualHost语法错误,对于同一主机支持多个虚拟主机的情况,只需要命名一次NameVirtualHost,如果在每个虚拟主机配置文件中都加上NameVirtualHost *:80 ,则会报这个警告。
原来在/etc/apache2/ports.conf中定义了*:80的 VirtualHost。找到了这个后呢,接下来一切就都顺利了。删除之前添加的NameVirtualHost,将所有vhost相应的地方都改成*:80。OK,一切非常顺利地解决了。
NameVirtualHost 192.168.1.232在所有httpd.conf中只需添加一次,如果添加多次也会出现上述错误。
问题二:You don't have permission to access /hello.php on this server
配置apache后访问网页出现“HTTP 错误 403 - 禁止访问,即 403 Forbidden:You don't have permission to access / on this server”。
这是由于你更改了你的DocumentRoot,而更改了这个默认值后,下面还有一个值是要随着更改的。就在它下面不远的地方,有这样一段:
#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "\Your_New_DocumentRoot">
中括号里的内容就是你更改的新值。这样就不会出现403错误了。
<Directory "/var/www/html1/">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
如果是Deny from all,则把Deny from all中的Deny改成了Allow,保存后重起了apache,然后再一测试我的网页