烂泥:apache虚拟主机的学习与应用
要配置apache的虚拟主机,我们需要分以下几步进行:
1、 检查apache虚拟主机模块
2、 开启apache虚拟主机功能
3、 httpd-vhosts.conf文件详解
4、 根据IP配置虚拟主机
5、 根据端口配置虚拟主机
6、 根据域名配置虚拟主机
一、检查apache虚拟主机模块
apache要配置虚拟主机,就需要先查看apache是否编译vhost_alias_module模块。当然apache默认是已经编译该模块的,我们可以通过以下命令查看是否已经编译模块,如下:
/usr/local/apache2/bin/apachectl -M

二、开启apache虚拟主机功能
要开启apache虚拟主机功能,我们需要修改apache配置文件http.conf。打开apache的安装目录,找到httpd.conf文件,去掉Include conf/extra/httpd-vhosts.conf前的#。如下:
vi httpd.conf

该行的作用是,把conf/extra/目录下的httpd-vhosts.conf文件导入虚拟主机配置中。

下面我们所有有关虚拟主机的配置都在httpd-vhosts.conf文件中进行。如下:

apache虚拟主机配置主要分为三种,分别是根据IP地址、根据端口、根据域名。
这三种虚拟主机,我们主要讲解基于域名的虚拟主机。基于IP与基于端口在生产环境中使用的比较少,我们在此只大致讲解其配置。
注意在此之前,我们还要修改httpd.conf文件把有关目录访问权限的配置选项去掉。否则在访问虚拟主机时,会报403错误。如下:

httpd.conf文件去掉Order deny,allow和Deny from all行,修改如下:
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

值得注意的是,当我们为apache启用虚拟主机之后,那么所有的用户请求都会交由对应的虚拟主机来处理。如果apache找不到对应的虚拟主机,则会把该请求交给配置文件中排在最前面的虚拟主机来处理。
同时如果配置基于域名的虚拟主机,我们必须要启用NameVirtualHost *:80行。如下:

三、httpd-vhosts.conf文件详解
httpd-vhosts.conf文件内容大致如下:
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "@@ServerRoot@@/docs/dummy-host.example.com"
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
NameVirtualHost指定虚拟主机所使用的IP地址或域名,但是最好是IP地址。使用基于域名的虚拟主机时,NameVirtualHost是必要的指令。NameVirtualHost可以定义多个。所有符合NameVirtualHost或<VirtualHost>标签定义的请求,都会被作为虚拟主机处理,而主服务器将不理会。NameVirtualHost定义了而<VirtualHost>标签没有定义的的请求,服务器会找不到相应的虚拟主机而将无法处理。所以每个NameVirtualHost定义的参数至少要有一个<VirtualHost>相匹配。
如果设置NameVirtualHost或<VirtualHost>为*:80的话,所有针对80端口的请求,都会被虚拟主机处理,请求会根据域名指向某个虚拟主机。如果有来自80端口的请求,而所请求的域名没有被配置为虚拟主机,那将指向第一个虚拟主机。这样主服务器将无法收到来自80端口的任何请求。为此也要为主服务器配置一个虚拟主机。
想要配置基于域名的虚拟主机,则必须使用NameVirtualHost指令,该指令用于指定对于当前服务器的哪些IP地址和端口可以接受虚拟主机的相关访问请求,而且这些IP地址和端口必须包含在服务器监听的地址和端口之中。
如果你希望用到服务器上所有的IP地址,你可以使用指令:NameVirtualHost *。
如果apache监听了多个端口(例如:常规的80端口和SSL的443端口),那么必须在NameVirtualHost指令中指定一个端口,例如:NameVirtualHost *:80。
我们可以使用VirtualHost配置段来添加一个虚拟主机,如果有多个虚拟主机,我们可以添加多个这样的配置段。
在VirtualHost配置段中,我们可以使用配置指令来对该虚拟主机进行设置,除了诸如创建进程等少数特殊的指令外,几乎所有的指令都可以出现在VirtualHost配置段中。如果没有设置某些指令,则该虚拟主机将采用主服务器范围内相同的全局指令作为默认设置。当然,VirtualHost配置段至少应该包含ServerName和DocumentRoot这两个配置指令,用以指定虚拟主机的域名和站点文档目录的路径。如下:
<VirtualHost *:80>
DocumentRoot "/www/a.ilanni.com"
ServerName a.ilanni.com
</VirtualHost>
ServerAdmin管理员邮箱。
DocumentRoot网站目录(注意:如果网站目录中的路径有空格,请在路径两端加上双引号)。
ServerName要绑定的域名(必填)。
ServerAlias要绑定的虚拟主机的别名。(可选,如果多个域名,中间以空格分隔,如果没有,则去掉该行)。支持*,?两种通配符,比如*.abc.com,表示任意一个abc.com的二级域名都可访问。
CustomLog用户日志文件(可选,如果不需要,则去掉该行)。
ErrorLog 错误日志(可选,如果不需要,则去掉该行)。
四、根据IP配置虚拟主机
apache基于IP虚拟主机在实际的生产环境中使用比较少,主要是使用在单网卡多IP的情况下。
我们要测试此功能,需要给服务器的网卡增加一个IP。首先查看服务器的IP地址,如下:
ifconfig eth0|grep "inet addr"|awk '{print $2}'|cut -d: -f2
ifconfig eth2|grep "inet addr"|awk '{print $2}'|sed 's/addr://g'

可以看到目前服务器的IP是192.168.1.213,再增加一个IP地址为192.168.1.215。eth0网卡增加IP地址,可以通过网卡配置文件实现。如下:
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:0
cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
/etc/init.d/network restart
ping 192.168.1.215

IP地址增加完毕后,我们现在来修改虚拟主机的配置文件httpd-vhosts.conf。如下:
cat httpd-vhosts.conf|grep -v ^$|grep -v ^#

httpd-vhosts.conf修改完毕后,我们需要检查该虚拟主机配置是否正确,使用-S命令。如下:
/etc/init.d/httpd –S

通过上图可以看到该虚拟主机的配置是正确。
为虚拟主机192.168.1.215创建主页文件,如下:
mkdir /www/192.168.1.215
echo "this is web-server 192.168.1.215">/www/192.168.1.215/index.html
cat /www/192.168.1.215/index.html

访问192.168.1.215虚拟主机。如下:

或者通过elinks进行测试,如下:
elinks -dump http://192.168.1.215

可以看到虚拟主机192.168.1.215,已经可以正常访问了。
现在访问192.168.1.213,看看实际效果。如下:

五、根据端口配置虚拟主机
apache默认是监听80端口,这个可以通过apache配置文件httpd.conf进行查看。如下:
cat /usr/local/apache2/conf/httpd.conf|grep 80

apache基于端口虚拟主机在实际生产环境中也不多见,一般是为公司内部人员提供访问的,如页面的后台、CMS发布、phpmyadmin等。
现在我们开始配置基于端口的虚拟主机,在此之前我们需要修改两个文件一是apache的配置文件httpd.conf,二是apache虚拟主机配置文件httpd-vhosts.conf。
现在我们使用8088这个端口来设置虚拟主机。修改httpd.conf。如下:
vim /usr/local/apache2/conf/httpd.conf

此文件修改完毕后,我们再来修改httpd-vhosts.conf。如下:
cat httpd-vhosts.conf|grep -v ^$|grep -v ^#

为虚拟主机192.168.1.215:8088创建主页文件,如下:
mkdir 192.168.1.215:8088
echo "his is web-server 192.168.1.215:8088">index.php
cat index.php

现在访问虚拟主机192.168.1.215:8088,如下:

或者使用elinks,如下:
elinks -dump http://192.168.1.215:8088

六、根据域名配置虚拟主机
apache基于域名的虚拟主机是我们经常使用的,也是在生产环境中最常见的。
配置基于域名的虚拟主机,我们还是要编辑httpd-vhosts.conf文件。如下:
vim httpd-vhosts.conf
:45,48s/192.168.1.215:8088/a.ilanni.com/g


以上修改完毕后,我们来创建虚拟主机a.ilanni.com默认主页。如下:
mkdir /www/a.ilanni.com
echo "<?php phpinfo();?>">/www/a.ilanni.com/index.php
cat /www/a.ilanni.com/index.php

以上配置完毕后,重新加载apache的配置文件,即优雅重启apache。如下:
/etc/init.d/httpd graceful

访问虚拟主机a.ilanni.com,如下:

或者使用elinks,如下:
elinks -dump http://a.ilanni.com

通过上图,可以看到目前虚拟主机a.ilanni.com,已经可以正常访问了。
七、混合配置虚拟主机
以上我们介绍了apache基于IP、基于端口和基于域名的虚拟主机配置。下面我们给出apache混合虚拟主机配置,配置文件如下:
<VirtualHost b.ilanni.com:8088>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/www/b.ilanni.com:8088"
ServerName b.ilanni.com:8088
ErrorLog "logs/b.ilanni.com:8088-error_log"
CustomLog "logs/b.ilanni.com:8088-access_log" common
</VirtualHost>

虚拟主机混用时的问题:
1、虚拟主机混用可以这样理解:一行NameVirtualHost指令定义的所有虚拟主机为一组;该组与一个基于IP的虚拟主机平级。即把一行NameVirtualHost定义的整个组看作是一个基于IP的虚拟主机。
2、虚拟主机指定的端口必须是Listen定义的。如果虚拟主机没有指定端口,则认为是80端口。如果NameVirtualHost * 这样定义,是指所有地址的所有已定义端口。
3、更具体的地址定义优先。比如NameVirtualHost指令定义了*:80,而某个基于IP的虚拟主机定义为192.168.0.1:80,那么此时如有对192.168.0.1:80的请求,那请求会被优先指向192.168.0.1:80定义的虚拟主机。所以为了避免混乱,不要定义相互有交叉或包含的地址区间。
4、一个虚拟主机,可以同时为基于域名和基于IP的。如上一例中最后一个虚拟主机。这样符合两种定义的请求都会被指同一个虚拟主机。有时要区别内外网对虚拟主机的访问时可以这样,因为来自内网的请求可能和来自外网的请求可能不一样,但是它们需要指向同一个虚拟主机。
使用"_default_"虚拟主机,这个虚拟主机可以理解成基于IP的虚拟主机。如下:
<VirtualHost _default_:*>
DocumentRoot /www/default
</VirtualHost>
这个虚拟主机将接管与其它虚拟主机IP和端口不匹配的请求。不过如此一来,主服务器将不会处理任何请求。因此把主服务器配置成一个虚拟主机是必要的。
烂泥:apache虚拟主机的学习与应用的更多相关文章
- apache 虚拟主机详细配置:http.conf配置详解
apache 虚拟主机详细配置:http.conf配置详解 Apache的配置文件http.conf参数含义详解 Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd. ...
- Apache虚拟主机配置
在一个Apache服务器上可以配置多个虚拟主机,实现一个服务器提供多站点服务,其实就是访问同一个服务器上的不同目录.Apache虚拟主机配置有3中方法:基于IP配置.基于域名配置和基于端口配置,这里介 ...
- Apache虚拟主机配置(多个域名访问多个目录)
Apache虚拟主机配置(多个域名访问多个目录) 为了方便管理虚拟主机,我决定使用一种方法,那就是修改httpd-vhosts.conf文件. 第一步首先要使扩展文件httpd-vhosts.conf ...
- 配置apache虚拟主机的实例总结
如何实现apache虚拟主机配置. 1.基于ip地址的虚拟主机Listen 80<VirtualHost 172.20.30.40> DocumentRoot /home/httpd/ht ...
- apache虚拟主机安装注意事项
apache虚拟主机在添加的时候,总是会有一些莫名其妙的问题,后来发现可以使用一个参数去验证的: xxxxx/httpd -S //这个参数会去检查虚拟主机配置的正确性,很好用 因为有时候可能就是缩进 ...
- django 项目部署在 Apache 后, 设置二级域名(Apache虚拟主机 、 万网二级域名设置)
上一篇文章简单说了怎么把django的项目部署到Apache上. 现在想弄个二级域名,也就是我原来有个域名 www.mysite.com,现在我想弄个 bbs.mysite.com ,该怎么做呢. 要 ...
- Ubuntu16.04+Apache虚拟主机配置详解
在window下,Apache的配置文件是httpd.conf,但在Linux下安装了Apache后发现其配置并不像window下那么简单,Linux下Apache将各个设置项分在了不同的配置文件中, ...
- windows环境下,apache虚拟主机配置
在windows环境下,apache从配置文件的相关配置: Windows 是市场占有率最高的 PC 操作系统, 也是很多人的开发环境. 其 VirtualHost 配置方法与 Linux 上有些差异 ...
- Apache虚拟主机实战
[root@localhost ~]# wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.2.32.tar.bz2 [root@localho ...
随机推荐
- Visual C++中的一些编程小技巧
在应用程序的任意地方实现窗体的最大化.最小化.正常窗口等功能 // 设置Windows窗体的状态void CMinWindowsDlg::SetWindowState(int nWindowSize) ...
- B树详解
B树 具体讲解之前,有一点,再次强调下:B-树,即为B树.因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解.如人们可能会以为 ...
- ASP.Net之数据绑定
---恢复内容开始--- [概述]数据绑定是指从数据源获取数据或向数据源写入数据.简单的数据绑定可以是对变量或属性的绑定,比较复杂的是对ASP.NET数据绑定控件的操作 1.简单的属性绑定 基于属性的 ...
- Windows 安装 GTK+ 图文说明
首先去官方下载: //官方网站 http://www.gtk.org/download/index.php //下载链接 http://win32builder.gnome.org/gtk+-bund ...
- ArcCatalog中连接SDE数据库
描述 在ArcCatalog采用直接的方式连接SDE数据库时,无论怎样填写连接参数,都连接不上(数据库管理工具和代码都可以连).主要报两类错误: Error:ORA-12154:TNS:无法解析指定的 ...
- flume 集群安装
./pssh -h ./host/all.txt -P mkdir /usr/local/app ./pssh -h ./host/all.txt -P tar zxf /usr/local/soft ...
- [outlook]打开以后就自动进入安全模式的解决方法。Outlook start in safe mode.
给客户写了一个Outlook的add-in, 用现在时髦的话应该叫outlook的app. 这个add-in的作用就是把outlook中的email,直接上传到SharePoint中.想要代码的联系我 ...
- [转]DevExpress v13.2 Beta版重要更新
昨日,DevExpress隆重宣布发布v13.2.3测试版,想抢先尝鲜的朋友可以在这里下载哦.希望使用DevExpress旧版本的朋友,看到这些更新后能尽快更新你的代码,以免造成不必要的麻烦. Das ...
- 国内最全最详细的hadoop2.2.0集群的HA高可靠的最简单配置
简介 hadoop中的NameNode好比是人的心脏,非常重要,绝对不可以停止工作.在hadoop1时代,只有一个NameNode.如果该NameNode数据丢失或者不能工作,那么整个集群就不能恢复了 ...
- Android添加快捷方式(Shortcut)到手机桌面
Android添加快捷方式(Short)到手机桌面 权限 要在手机桌面上添加快捷方式,首先需要在manifest中添加权限. <!-- 添加快捷方式 --> <uses-permis ...