最新版apache虚拟主机配置与应用学习教程

 更新时间:2016年1月28日 00:49  点击:1628

要配置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

clip_image001

 

二、开启apache虚拟主机功能

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

vi httpd.conf

clip_image002

 

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

clip_image003

 

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

clip_image004

 

apache虚拟主机配置主要分为三种,分别是根据IP地址、根据端口、根据域名。

这三种虚拟主机,我们主要讲解基于域名的虚拟主机。基于IP与基于端口在生产环境中使用的比较少,我们在此只大致讲解其配置。

注意在此之前,我们还要修改httpd.conf文件把有关目录访问权限的配置选项去掉。否则在访问虚拟主机时,会报403错误。如下:

clip_image005

 

httpd.conf文件去掉Order deny,allow和Deny from all行,修改如下:

Options FollowSymLinks

AllowOverride None

 

clip_image006

 

值得注意的是,当我们为apache启用虚拟主机之后,那么所有的用户请求都会交由对应的虚拟主机来处理。如果apache找不到对应的虚拟主机,则会把该请求交给配置文件中排在最前面的虚拟主机来处理。

同时如果配置基于域名的虚拟主机,我们必须要启用NameVirtualHost *:80行。如下:

clip_image007

 

三、httpd-vhosts.conf文件详解

httpd-vhosts.conf文件内容大致如下:

NameVirtualHost *: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

 

NameVirtualHost指定虚拟主机所使用的IP地址或域名,但是最好是IP地址。使用基于域名的虚拟主机时,NameVirtualHost是必要的指令。NameVirtualHost 可以定义多个。所有符合NameVirtualHost或标签定义的请求,都会被作为虚拟主机处理,而主服务器将不理会。NameVirtualHost定义了而标签没有定义的的请求,服务器会找不到相应的虚拟主机而将无法处理。所以每个NameVirtualHost定义的参数至少要有一个相匹配。

如果设置NameVirtualHost或为*:80的话,所有针对80端口的请求,都会被虚拟主机处理,请求会根据域名指向某个虚拟主机。如果有来自80端口的请求,而所请求的域名没有被配置为虚拟主机,那将指向第一个虚拟主机。这样主服务器将无法收到来自80端口的任何请求。为此也要为主服务器配置一个虚拟主机。

想要配置基于域名的虚拟主机,则必须使用NameVirtualHost指令,该指令用于指定对于当前服务器的哪些IP地址和端口可以接受虚拟主机的相关访问请求,而且这些IP地址和端口必须包含在服务器监听的地址和端口之中。

如果你希望用到服务器上所有的IP地址,你可以使用指令:NameVirtualHost *。

如果apache监听了多个端口(例如:常规的80端口和SSL的443端口),那么必须在NameVirtualHost指令中指定一个端口,例如:NameVirtualHost *:80。

我们可以使用VirtualHost配置段来添加一个虚拟主机,如果有多个虚拟主机,我们可以添加多个这样的配置段。

在 VirtualHost配置段中,我们可以使用配置指令来对该虚拟主机进行设置,除了诸如创建进程等少数特殊的指令外,几乎所有的指令都可以出现在 VirtualHost配置段中。如果没有设置某些指令,则该虚拟主机将采用主服务器范围内相同的全局指令作为默认设置。当然,VirtualHost配置段至少应该包含ServerName和DocumentRoot这两个配置指令,用以指定虚拟主机的域名和站点文档目录的路径。如下:

DocumentRoot "/www/a.ilanni.com"

ServerName a.ilanni.com

 

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'

clip_image008

 

可以看到目前服务器的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

clip_image009

 

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

cat httpd-vhosts.conf|grep -v ^$|grep -v ^#

clip_image010

 

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

/etc/init.d/httpd –S

clip_image011

 

通过上图可以看到该虚拟主机的配置是正确。

为虚拟主机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

clip_image012

 

访问192.168.1.215虚拟主机。如下:

clip_image013

 

或者通过elinks进行测试,如下:

elinks -dump http://192.168.1.215

clip_image014

 

可以看到虚拟主机192.168.1.215,已经可以正常访问了。

现在访问192.168.1.213,看看实际效果。如下:

clip_image015

 

五、根据端口配置虚拟主机

apache默认是监听80端口,这个可以通过apache配置文件httpd.conf进行查看。如下:

cat /usr/local/apache2/conf/httpd.conf|grep 80

clip_image016

 

apache基于端口虚拟主机在实际生产环境中也不多见,一般是为公司内部人员提供访问的,如页面的后台、CMS发布、phpmyadmin等。

现在我们开始配置基于端口的虚拟主机,在此之前我们需要修改两个文件一是apache的配置文件httpd.conf,二是apache虚拟主机配置文件httpd-vhosts.conf。

现在我们使用8088这个端口来设置虚拟主机。修改httpd.conf。如下:

vim /usr/local/apache2/conf/httpd.conf

clip_image017

 

此文件修改完毕后,我们再来修改httpd-vhosts.conf。如下:

cat httpd-vhosts.conf|grep -v ^$|grep -v ^#

clip_image018

 

为虚拟主机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

clip_image019

 

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

clip_image020

 

或者使用elinks,如下:

elinks -dump http://192.168.1.215:8088

clip_image021

 

六、根据域名配置虚拟主机

apache基于域名的虚拟主机是我们经常使用的,也是在生产环境中最常见的。

配置基于域名的虚拟主机,我们还是要编辑httpd-vhosts.conf文件。如下:

vim httpd-vhosts.conf

:45,48s/192.168.1.215:8088/a.ilanni.com/g

clip_image022

 

clip_image023

 

以上修改完毕后,我们来创建虚拟主机a.ilanni.com默认主页。如下:

mkdir /www/a.ilanni.com

echo "">/www/a.ilanni.com/index.php

cat /www/a.ilanni.com/index.php

clip_image024

 

以上配置完毕后,重新加载apache的配置文件,即优雅重启apache。如下:

/etc/init.d/httpd graceful

clip_image025

 

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

clip_image026

 

或者使用elinks,如下:

elinks -dump http://a.ilanni.com

clip_image027

 

通过上图,可以看到目前虚拟主机a.ilanni.com,已经可以正常访问了。

七、混合配置虚拟主机

以上我们介绍了apache基于IP、基于端口和基于域名的虚拟主机配置。下面我们给出apache混合虚拟主机配置,配置文件如下:

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

 

clip_image028

 

虚拟主机混用时的问题:

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的虚拟主机。如下:

DocumentRoot /www/default

 

这个虚拟主机将接管与其它虚拟主机IP和端口不匹配的请求。不过如此一来,主服务器将不会处理任何请求。因此把主服务器配置成一个虚拟主机是必要的。

[!--infotagslink--]

相关文章

  • 使用xampp搭建运行php虚拟主机的详细步骤

    最近,新装了xampp这么一个软件搭建自己的web开发环境,安装完毕自然要虚拟几个目录放自己的项目了,现将如何在xampp搭建的web服务器环境下新建虚拟主机的过程总结分享一下,大致过程分为三步,如下: 第一步: 用记事本打开C:/WIN...2015-10-23
  • JS跨浏览器解析XML应用过程详解

    这篇文章主要介绍了JS跨浏览器解析XML应用过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-16
  • Apache启动报错No space left on device: AH00023该怎么解决

    Apache启动报错No space left on device: AH00023错误可能是进程导致了,虽然小编不知道什么原因但网上提供的解决办法确实是可以解决我们的问题,下面来看看。对于这类错误是因为linux系统的ipc信号量造成的,apache启动时...2015-10-21
  • apache配置黑名单和白名单及账户权限控制

    本文我们将分享apache配置黑名单和白名单,apache层的账户权限控制,以及apache黑名单白名单过滤功能,apache rewrite规则实现白名单。 apache配置黑名单和白名单的两...2016-09-14
  • apache开启gzip详解教程

    今天在用百度工具检测时发,发现有个提示如下 原来可以开启gzip啊,因为我的是apache所以和iis不同,经过网站搜索开启方法如下 一,找到你的httpd.conf文件,打开找到如下 ...2016-01-28
  • vivo X9如何查出后台偷跑流量应用?vivo X9查出后台偷跑流量应用的方法

    vivo X9如何查看后台流量偷跑的情况?小编教你轻松查到!还不了解的小伙伴快来看看吧! 1)打开手机自带的【i管家】应用,打开后点击【流量监控】选项。(如下图) 2)接着选...2016-12-31
  • 解决PHPstudy Apache无法启动的问题【亲测有效】

    这篇文章主要介绍了PHPstudy Apache无法启动的问题及解决方法【亲测有效】,本文给大家总结了三种方法供大家参考,需要的朋友可以参考下...2020-10-30
  • PHP云存储Redis的应用场景与Redis实现排行榜功能

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。本文我们来讲解Redis的应用场景实例。 C...2016-11-25
  • apache http server遇到了一个问题,需要关闭

    重装系统后,重新安装了xamp,最近启动的时候经常报apache http server遇到了一个问题,需要关闭,显示如图: 解决方法:查看szModName报错的模块,然后把PHP安装目录下对应的模块...2016-01-28
  • Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程详解

    Windows Server 2016 上配置 APACHE+SSL+PHP+perl怎么配置?小编推荐了一篇介绍Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程,有需要的同学快来看看吧! ...2017-07-06
  • nginx+apache+mysql+php+memcached+squid搭建集群web环境

    当前,LAMP开发模式是WEB开发的首选,如何搭建一个高效、可靠、稳定的WEB服务器一直是个热门主题,本文就是这个主题的一次尝试。...2016-01-27
  • PHP explode()函数的几个应用和implode()函数有什么区别

    explode()函数介绍explode() 函数可以把字符串分割为数组。语法:explode(separator,string,limit)。 参数 描述 separator 必需。规定在哪里分割字符串。 string...2015-11-08
  • PHP Libevent扩展安装配置及简单应用

    Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,下文我们就一起来看PHP Libevent扩展安装...2016-11-25
  • php中echo <<< 的应用

    <? $a="变量的值将被带入"; echo <<< help <pre> php中echo <<< 的应用 虽然echo "...";可以断行,但若其中如出现",则仍需做转义 处理。需写做: echo " ...2016-11-25
  • 隐藏Nginx或Apache以及PHP的版本号的方法

    这篇文章主要介绍了隐藏Nginx或Apache以及PHP的版本号的方法,主要用来防止针对性的漏洞攻击,需要的朋友可以参考下...2016-01-05
  • apache下设置缓存方法详细介绍

    默认情况下,apache安装完以后,是不允许被cache的。如果外接了cache或squid服务器要求进行web加速的话,就需要在htttpd.conf里进行设置,当然前提是在安装apache的时候要激活mod_c...2016-01-28
  • PHP-GTK 介绍及其应用

    1. PHP-GTK介绍 1.1 PHP-GTK PHP-GTK是PHP的延伸模组,它可以让程式设计师写出在客户端执行的、且独立的GUI的程式。这个模组不允许在浏览器上显视GTK+的程式,它一开始就...2016-11-25
  • apache中Order Allow Deny详解

    Order A, B (其中,A和B均可以代表allow或者deny,以下conlist表示控制列表) A from conlist1 B from conlist2 那么最终访问控制的结果为:(以(A)表示A的控制范围,) (A)= (conli...2016-01-28
  • Apache Reference Manual (10)

    Satisfy directive Syntax: Satisfy 'any' or 'all' Default: Satisfy all Context: directory, .htaccess Status: core Compatibility: Satisfy is only available...2016-11-25
  • Vue中keep-alive的两种应用方式

    这篇文章主要介绍了Vue中keep-alive的两种应用方式,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15