apache 的虚拟主机配置

讲解一下 apache 的虚拟主机(virtualhost)配置,基于IP地址,基于端口,已经基于域名的apache虚拟主机配置方法

apache 虚拟主机的配置,我们在前面的文章中,讲解了 linux 平台,LAMP的快速搭建,其实不管是 rpm 包安装的,还是源代码编译安装的,其配置文件都是一样的,区别就配置文件的位置可能不一样,因为源代码编译安装,其所有的路径都可以指定,而 rpm 包,则是固定的,位于 /etc/httpd ,文档则在 /usr/share/doc 目录下,网站默认根目录为 /var/www/html。

本次由于是继续讲之前的文章,是用的 rpm 包,配置文件位于 /etc/httpd/conf/httpd.conf 。

那么什么又是虚拟主机呢?这里所提到的虚拟主机,是指 apache 虚拟主机,初学者不要把它和虚拟化的虚拟机之类的搞混了。从 web 概念上来讲,访问一个 web 服务,其实就是访问某个主机上的某个端口,这个端口默认是 80,通常需要访问不同的域名,不同的端口,以便于实现对不同网站的访问。这个时候就需要配置虚拟主机。也就是做到了一个服务器一个 apache 提供多个网站服务。

这次由于本篇文章是讲虚拟主机的,所以在 /etc/httpd/conf/httpd.conf 配置文件,只会讲关于虚拟主机的配置,至于其它的一些配置,后面我都会慢慢的去更新。

好了,直接进入正题,在更改配置文件中,都使用到编辑器,我一般是使用 VIM 编辑器,关于 VIM 编辑器的使用,可以 点击这里 参考我博客里的这篇文章,当然,你也可以使用其它的编辑器,不过我觉得 vim 还是比较好用的。

用 vim 打开 /etc/httpd/conf/httpd.conf 直接使用 Shift +G ,跳到结尾行,我们可以看到,最后这几行,都是注释的,这是一个 example 也就是例子,写的时候可以参考它,这里我们不用管它。直接在下面写就行。

apache 的虚拟主机,一共有三种,分别如下:

基于 IP 地址的虚拟主机,使用不同的 IP 地址,来提供多个网站。

基于端口号的虚拟主机,指使用同一个 IP 地址,不同的端口号,来提供多个不同的网站。

基于 FQDN 的虚拟主机,指使用同一个 IP 地址,同一个端口号,通过域名来区分不的同站。

一般都是基于FQDN的的虚拟主机,最常用,因为 IP 资源有限,端口号的话,都是80,用非80端口来提供网站,用户在访问的时候,还要手动加上端口号,会比较麻烦。基次就是使用基于 IP 的虚拟主机。当然一般情况是这种结合方式。

先来讲一个基于 IP 的吧,服务器有多块网卡,可以配多个 IP 地址,当然只有一个网卡的情况下,也是可以配置多个 IP 地址的。本次第一个实验,就使用三个 IP 吧。

另外再提一个,有的可能使用的是windows的apache软件,不过配置文件,httpd.conf是一样的,区别就是配置文件的所在位置不一样,一般模块路径,配置文件里的路径,这都不一样,这里讲 linux 的 apache ,windows的,也可以按这个配置,只是更改一下路径,即可。

使用 ifconfig 命令,可以查看当前配置的 IP 地址。

[root@bogon ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 66:38:64:32:38:65
inet addr:10.0.3.13 Bcast:10.0.3.255 Mask:255.255.255.0
inet6 addr: fe80::6438:64ff:fe32:3865/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:161547 errors:0 dropped:0 overruns:0 frame:0
TX packets:25279 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:76928672 (73.3 MiB) TX bytes:2375628 (2.2 MiB)

[root@bogon ~]#

我这里是 10.0.3.13,由于我这环境只有一块网卡,就在一块网卡上配置多个 IP ,使用如下命令

ifconfig eth0:0 10.0.3.101
ifconfig eth0:1 10.0.3.102
ifconfig eth0:2 10.0.3.103

配置完成后,可以 ping 一下测试。ifconfig 命令配置的 IP ,重启后会失效,若要保存,需要更改配置文件。关于 linux 网络的配置,这个在后面我会讲到。

下面配置 httpd.conf,直接在最后,添加如下内容

NameVirtualHost 10.0.3.101:80
<VirtualHost 10.0.3.101:80>
ServerName 10.0.3.101
DocumentRoot /var/www/html/101
CustomLog logs/101.acc.log common
ErrorLog logs/101.err.log
</VirtualHost>
NameVirtualHost 10.0.3.102:80
<VirtualHost 10.0.3.102:80>
ServerName 10.0.3.102
DocumentRoot /var/www/html/102
CustomLog logs/102.acc.log common
ErrorLog logs/102.err.log
</VirtualHost>
NameVirtualHost 10.0.3.103:80
<VirtualHost 10.0.3.103:80>
ServerName 10.0.3.103
DocumentRoot /var/www/html/103
CustomLog logs/103.acc.log common
ErrorLog logs/103.err.log
</VirtualHost>

这段配置中,NameVirtualHost 指定要监听的IP地址和端口号。

<VirtualHost> 指定一个虚拟主机。

ServerName 指定FQDN。这个在基于域名的虚拟主机时,很重要。

CustomLog 指定连接日志, 后面的 common 为日志格式,必须要有,否则启动会报错,一般为 common即可。

ErrorLog 指定错误日志,即当发生错误时,记录的日志

</Virtualhost> 结束一个虚拟主机

然后建立我们的网站目录,这里我就随便写点内容,验证是不同的网站就可以了,实际生产环境中,当然放你的网站程序了。使用如下命令,创建我们在 <VirtualHost>指定的文件夹,并写一个index.html。

cd /var/www/html
mkdir 101 102 103
echo "this is 101" > /var/www/html/101/index.html
echo "this is 102" > /var/www/html/102/index.html
echo "this is 103" > /var/www/html/103/index.html

修改完成后,记得要重启服务

service httpd restart

然后 打开浏览器,分别测试,我的截图如下。

virtualhost-1

至此,基于IP地址的虚拟主机,就配置完成了,下面来讲一个基于端口号的配置。

这次我就使用我的这个 10.0.3.13 来配置吧 配置文件如下:

Listen 8080
Listen 8090

NameVirtualHost 10.0.3.13:8080
<VirtualHost 10.0.3.13:8080>
ServerName 10.0.3.13:8080
DocumentRoot /var/www/html/13.8080
CustomLog logs/13.8080.acc.log common
ErrorLog logs/13.8080.err.log
</VirtualHost>

NameVirtualHost 10.0.3.13:8090
<VirtualHost 10.0.3.13:8090>
ServerName 10.0.3.13:8090
DocumentRoot /var/www/html/13.8090
CustomLog logs/13.8090.acc.log common
ErrorLog logs/13.8090.err.log
</VirtualHost>

和基于 IP 的配置,基于一样,只是区别在于端口上面。不要忘了那个 Listen 。

创建目录和index.html文件

cd /var/www/html
mkdir 13.8080 13.8090
echo "this is 13 port 8080" > /var/www/html/13.8080/index.html
echo "this is 13 port 8090" > /var/www/html/13.8090/index.html

记得改完了配置文件后,重启 httpd 服务,下面来测试一下:

virtualhost-2

至于,这种基于端口号的虚拟主机配置就完成了,基于域名的虚拟主机配置,也一样,下面我就贴出来配置,其它的不多讲了,举一反三,即可。最重要的就是 ServerName。

NameVirtualHost 10.0.3.13:80
<VirtualHost 10.0.3.13:80>
ServerName www.ifool.me
DocumentRoot /var/www/html/ifool
CustomLog logs/www.ifool.me.acc.log common
ErrorLog logs/www.ifool.me.err.log
</VirtualHost>

<VirtualHost 10.0.3.13:80>
ServerName blog.ifool.me
DocumentRoot /var/www/html/blog
CustomLog logs/blog.acc.log common
ErrorLog logs/blog.err.log
</VirtualHost>

<VirtualHost 10.0.3.13:80>
ServerName www.xxx.com
DocumentRoot /var/www/html/xxx
CustomLog logs/xxx.acc.log common
ErrorLog logs/xxx.err.log
</VirtualHost>

这里的 10.0.3.13:80 , 其实也可以写成 *:80 意义一样,只是一个是监听全部IP,一个是监听指定 IP,另外,DocumentRoot 难道只能写到 /var/www/html 目录里面吗?其实不是的,想写在哪里,都可以,若不在默认的 /var/www/html 目录,则需要再加一个段配置,否则不能访问,配置如下:

<Directory "/data/www">
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>

其中,/data/www 代表你的网站目录,需要放到哪里,在 httpd.conf 里写上这一段就好。还有 Options 后面的 indexes,是指,找到所定义的首页文件时,将打印出网站目录下所有文件的列表,这个一般建议不写,options 写成 None 即可。不过看需求决定吧。

实际环境中的 IP 域名等,要根据实际的情况去配置。

好了,本次文章,就讲到这里了

猜您喜欢