轻松配置httpd的虚拟主机

httpd使用VirtualHost指令进行虚拟主机的定义。支持三种虚拟主机:基于ip,基于端口和基于名称。其中基于端口的虚拟主机在httpd的术语上(例如官方手册)也属于基于IP的。

当一个请求到达时,将首先匹配虚拟主机。匹配虚拟主机的规则为最佳匹配法。所谓最佳,是指通配的越少,匹配的优先级越高。例如"192.168.100.14:80"的优先级高于"*:80"。如果基于名称的虚拟主机无法匹配上,则采用虚拟主机列表中的第一个虚拟主机作为响应主机。如果所有虚拟主机都无法匹配上,则采用从主配置段落中的主机,如果主配置段落中注释了DocumentRoot,则返回对应的错误。

主配置段落的指令基本上都能使用在虚拟主机容器中。至于虚拟主机中必须配有什么指令,这没有规定,因为虚拟主机只是封装一组指令而已,即使其中没有任何指令,它也会从主配置段落中继承。但是,既然要使用且已经使用了虚拟主机,按照常理来说,至少得提供不同的ServerName,DocumentRoot等指令以让它们各自独立。

最后需要说明的是,httpd的"-S"选项在调试虚拟主机配置选项时非常有用。

1 基于IP的虚拟主机
基于IP的虚拟主机是在不同的IP+PORT上提供不同的站点服务,最常见的是在不同端口上提供不同站点。

如果仅基于IP,即使用不同IP地址,那么要求操作系统上有两个或更多IP地址,可以提供多个网卡,或者通过网卡别名来实现。

如果基于端口,即使用不同端口,则使用相同IP或不同IP均可,但在httpd术语中,基于单个IP但不同端口的虚拟主机,也是基于IP的虚拟主机。

假设本机为192.168.100.14。

# 首先设置个虚拟网卡。

shell> ip a add 192.168.100.144 dev eth0 label eth0:

# 添加基于IP地址的虚拟主机,DocumentRoot使用的相对路径,基于ServerRoot

shell> vim /etc/apache/extra/vhosts.conf
<VirtualHost 192.168.100.14:>
ServerName www.a.com
DocumentRoot htdocs/a.com
</VirtaulHost> <VirtualHost 192.168.100.144:>
ServerName www.b.com
DocumentRoot htdocs/b.com
</VirtaulHost>

在主配置文件中,将该虚拟主机配置文件vhosts.conf包含进去。

include /etc/apache/extra/vhosts.conf

再提供DocumentRoot和各自的index.html。

mkdir /usr/local/apache/htdocs/{a.com,b.com}
echo '<h1>a.com<h1>' >/usr/local/apache/htdocs/a.com/index.html
echo '<h1>b.com<h1>' >/usr/local/apache/htdocs/b.com/index.html

使用httpd -S查看配置文件加载过程。

[root@xuexi httpd-2.4.]# httpd -S -f /etc/apache/httpd.conf
VirtualHost configuration:
192.168.100.14: www.a.com (/etc/apache/extra/vhosts.conf:)
192.168.100.144: www.b.com (/etc/apache/extra/vhosts.conf:)
ServerRoot: "/usr/local/apache"
Main DocumentRoot: "/usr/local/apache/htdocs"
Main ErrorLog: "/usr/local/apache/logs/error_log"
Mutex proxy: using_defaults
Mutex default: dir="/usr/local/apache/logs/" mechanism=default
PidFile: "/usr/local/apache/logs/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="daemon" id=
Group: name="daemon" id=

重启httpd。

service httpd restart

测试。

2 基于端口的虚拟主机
基于端口的虚拟主机需要监听两个套接字。

首先在配置文件中使用Listen指令修改监听套接字,这里假设只基于端口,所以只需修改端口号即可。

listen
listen

修改虚拟主机配置文件vhosts.conf文件如下:

shell> vim /etc/apache/extra/vhosts.conf

<VirtualHost 192.168.100.14:>
ServerName www.a.com
DocumentRoot htdocs/a.com
</VirtaulHost> <VirtualHost 192.168.100.14:>
ServerName www.b.com
DocumentRoot htdocs/b.com
</VirtaulHost>

重启httpd。测试www.a.com和www.b.com能否显示。

3 基于名称的虚拟主机
请求报文中获取资源时包含了两部分资源定位的格式:TCP/IP协议和HTTP协议,虽然TCP/IP部分相同,但是HTTP协议的请求报文中指定了HOST,这就是基于域名的虚拟主机能实现的原因。也因此,基于名称的虚拟主机必须指定ServerName指令,否则它将会继承操作系统的FQDN。

shell> vim /etc/apache/extra/vhosts.conf

<VirtualHost 192.168.100.14:>
ServerName www.a.com
DocumentRoot htdocs/a.com
</VirtaulHost> <VirtualHost 192.168.100.14:>
ServerName www.b.com
DocumentRoot htdocs/b.com
</VirtaulHost>

注意,对于基于名称的虚拟主机,当使用IP地址请求(例如浏览器中输入的是IP地址),或者无法匹配到任何虚拟主机时,将采用第一个虚拟主机作为默认虚拟主机。

例如,当某个hosts文件中添加了"192.168.100.14 www.c.com"时,即使在配置文件中并没有配置www.c.com的虚拟主机,但访问时仍然会访问虚拟主机列表的第一个。

转载自骏马金龙:http://www.cnblogs.com/f-ck-need-u/p/7632878.html

配置httpd虚拟主机的更多相关文章

  1. CentOS7配置httpd虚拟主机

    本实验旨在CentOS7系统中,httpd-2.4配置两台虚拟主机,主要有以下要求: (1) 提供两个基于名称的虚拟主机: www1.stuX.com,页面文件目录为/web/vhosts/www1: ...

  2. apache 多端口配置和虚拟主机配置

    1 打开httpd.conf文件 2 添加端口监听 (找到Lisen 80 在后面添加 Listen 端口号 如Listen 1112) port =>你的端口 project_name=> ...

  3. PHP中级篇 Apache配置httpd-vhosts虚拟主机总结及注意事项[OK]

    经常使用Apache虚拟主机进行开发和测试,但每次需要配置虚拟主机时都习惯性的ctrl+c和ctrl+v,这次由于重装系统,需要配置一个新的PHP开发环境虚拟主机,于是总结一下Apaceh配置http ...

  4. 配置Apache虚拟主机

    实验环境 一台最小化安装的CentOS 7.3虚拟机 配置基础环境 1. 安装apache yum install -y httpd 2. 建立虚拟主机的根目录 mkdir /var/wwwroot ...

  5. wamp开发环境配置之配置Apache虚拟主机

    网站建设人员在本地测试时,常常不是一个网站,那怎么能像输入域名一样在地址栏上面输入“域名”就能本地访问该网站呢?这里就要配置Apache虚拟主机了! 1.找到apache\conf\httpd.con ...

  6. httpd虚拟主机起不来!!

    前几天在公司,练习负载均衡配置.在配置虚拟主机的web服务(apache) ,创建好虚拟主机的配置文件 ss -tnl  查看监控端口80已起来,通过本地浏览器访问一直显示默认的欢迎页... 一个下午 ...

  7. 配置LANMP环境(7)-- 配置nginx反向代理,与配置apache虚拟主机

    一.配置nginx反向代理 1.修改配置文件 vim /etc/nginx/nginx.conf 在35行http下添加一下内容: include /data/nginx/vhosts/*.conf; ...

  8. PHP中级篇 Apache配置httpd-vhosts虚拟主机总结及注意事项

    经常使用Apache虚拟主机进行开发和测试,但每次需要配置虚拟主机时都习惯性的ctrl+c和ctrl+v,这次由于重装系统,需要配置一个新的PHP开发环境虚拟主机,于是总结一下Apaceh配置http ...

  9. 配置Nginx虚拟主机

    实验环境 一台最小化安装的CentOS 7.3虚拟机 配置基本环境 1. 安装nginx yum install -y epel-* yum isntall -y nginx vim 2. 建立虚机主 ...

随机推荐

  1. easyui datagrid编辑时编辑框自动获取焦点

    onDblClickCell:function(rowIndex, field, val){//双击单元格监听器 $(this).datagrid('beginEdit',rowIndex);//开启 ...

  2. 题解 P1006 传纸条

    传送门 其实我觉得这个跟P1004挺类似(又是动规) 题解P1004 #include<iostream> #include<cstdio> #include<cstri ...

  3. bzoj1822: [JSOI2010]Frozen Nova 冷冻波网络流

    思路比较显然:二分答案,流流流 但是实现的时候感觉自己数学捉急.. 一开始算了个直线到点距离.... 应该是线段到点距离 #include <bits/stdc++.h> #define ...

  4. HTTP/2之旅 (翻译)

    Journey to HTTP/2 HTTP/2 距离我上一次通过博客写作以来, 经过了很长的一段安静的时间. 因为一直没有足够的时间投入其中. 直到现在有了一些空闲的时间, 我想利用他们写一些HTT ...

  5. Linux下无图形界面安装Matlab

    1 下载R2015b_glnxa64.iso和破解文件Matlab+2015b+Linux64+Crack 百度网盘可以直接搜索资源.推荐一个可以多线程下载百度网盘超大文件的工具Aria2,均速1.3 ...

  6. MySQL 查看表大小

    当遇到数据库占用空间很大的情况下,可以用以下语句查找大数据量的表 SELECT TABLE_NAME ,),) 'DATA_SIZE(M)' ,),) 'INDEX_SIZE(M)' ,AVG_ROW ...

  7. class类型重定义,防止头文件重复加载

    今天调用自己写的一个类,出现了class类型重定义问题,上网查了相关资料,发现是头文件重复include引起的问题. 防止头文件重复加载: 系统那些头文件,无论怎么include都没事,因为一般都用了 ...

  8. tomcat配置https 和 http强制跳转https

    https是http+ssl的可进行加密传输,身份认证的网络协议,防止数据在传输过程中被窃取.因此,https将得到越来越广泛的应用,下面是如何配置tomcat服务器让http自动转到https的步骤 ...

  9. ios 身份证照片识别信息

    一个近乎完整的可识别中国身份证信息的Demo就问问你霸气不

  10. Vuforia切换回识别场景后黑屏解决

    使用Vuforia SDK开发时,如果从其他非识别场景切换回识别场景,可能会出现黑屏问题. 解决方法是在切换到其他场景时,先将当前场景的Tracker信息全部Stop.代码如下: IEnumerato ...