apache httpd系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html


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:0 # 添加基于IP地址的虚拟主机,DocumentRoot使用的相对路径,基于ServerRoot
shell> vim /etc/apache/extra/vhosts.conf <VirtualHost 192.168.100.14:80>
ServerName www.a.com
DocumentRoot htdocs/a.com
</VirtualHost> <VirtualHost 192.168.100.144:80>
ServerName www.b.com
DocumentRoot htdocs/b.com
</VirtualHost>

在主配置文件中,将该虚拟主机配置文件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.27]# httpd -S -f /etc/apache/httpd.conf
VirtualHost configuration:
192.168.100.14:80 www.a.com (/etc/apache/extra/vhosts.conf:23)
192.168.100.144:80 www.b.com (/etc/apache/extra/vhosts.conf:28)
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=2
Group: name="daemon" id=2

重启httpd。

service httpd restart

测试。

2 基于端口的虚拟主机

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

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

listen 80
listen 8080

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

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

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

重启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:80>
ServerName www.a.com
DocumentRoot htdocs/a.com
</VirtualHost> <VirtualHost 192.168.100.14:80>
ServerName www.b.com
DocumentRoot htdocs/b.com
</VirtualHost>

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

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

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

  1. php配置虚拟主机的配置步骤(hosts、httpd.conf、vhosts.conf)1.配置本地的dns文件2.配置apache的主配置文件3.配置Apache的虚拟主机

    1.域名解析(DNS) 找到C:\Windows\System32\drivers\etc目录下的hosts文件,在里面进行添加对应的内容

  2. Httpd服务入门知识-Httpd服务常见配置案例之虚拟主机

    Httpd服务入门知识-Httpd服务常见配置案例之虚拟主机 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.虚拟主机实现方案 1>.Apache httpd 有三种实现虚 ...

  3. centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课

    centos    LAMP第二部分apache配置  下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转  配置apache的访问日志  配置静态文件缓存  配置防盗链 ...

  4. 利用主机域名配置Apache的虚拟主机功能

    利用主机域名配置Apache的虚拟主机功能,可以减轻服务器为每一个网站分配IP地址的压力.而且根据不同的主机域名可以输出不同的网页内容.要实现此项功能,可以通过修改/etc/host文件来强制定义IP ...

  5. nginx配置多个虚拟主机vhost

    在nginx下配置虚拟主机vhost非常方便.主要在nginx的配置文件nginx.conf中添加一个server即可 比如我想配置两个虚拟主机,通过域名linux.com和linux2.com访问, ...

  6. Nginx入门讲解——初步认识了解nginx.conf配置文件以及配置多个虚拟主机

    本文引自网络进攻学习之用https://blog.csdn.net/weixin_38111957/article/details/81080539 一. 引言上节文章讲述了如何用信号控制Nginx服 ...

  7. nginx配置多个虚拟主机(mac)

    1 . 安装  通过homebrew安装nginx,默认安装在:/usr/local/Cellar/nginx/版本号.配置文件在路径:/usr/local/etc/nginx ,默认配置文件ngin ...

  8. 实例:使用playbook实现httpd安装、配置、以及虚拟主机的配置

    一.安装环境配置 1.在控制节点给受控主机配置本地仓库文件 [root@ansible ~]# vim /etc/yum.repos.d/dvd.repo [AppStream] name=appst ...

  9. Apache服务器在80端口配置多域名虚拟主机的方法

    我们在配置一台服务器的时候,如果只运行一个站点,往往过于浪费资源.Nginx和Apache都可以通过配置虚拟主机实现多站点.配置虚拟主机的方式主要有两种,一种是多个不同端口对应的多个虚拟主机站点,一种 ...

随机推荐

  1. Appium环境搭建(python)

    appium是一个开源的,适用于原生或者移动网络和混合应用程序在 iOS 和 Android 平台上的的开源自动化测试框架.在这里,详细的介绍Appium的环境搭建步骤. 1.安装Node.js在ht ...

  2. Day-6: 函数式编程

    函数式编程就是封装成一个个函数,一次调用来完成复杂任务. 函数式编程的一个特点是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! 高阶函数 高阶函数就是将函数的变量名作为参数传入,内部再对 ...

  3. 移动端车牌识别ocr系统

    移动端车牌识别ocr系统优点: 1.识别速度快:高度优化的车牌定位和识别算法,识别时间≤50毫秒(200万图片). 2.识别率:白天识别率≥99.7%:夜间识别率≥98%. 3.识别速度:单张图片识别 ...

  4. zbrush曲面增加厚度

    把曲面增加厚度方便雕刻机雕刻. 可以使用zbrush中的边循环功能. 1.准备好需要增加厚度的曲面,把曲面的边缘调整好,尽量的变得平滑. 2.将模型导入到zbrush中,开启双面显示,以方便观察模型的 ...

  5. RSA算法介绍

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt279 2.1.1     算法实现 首先, 找出三个数, p, q, r,其 ...

  6. IntelliJ IDEA使用(一)基本设置与类、方法模板设置

    其实之前一直开发都是在使用的是Eclipse,但是最近在做Maven项目的时候要用IntelliJ IDEA,据说这个idea功能非常的强大,最近在使用的时候发现如果适应的真的是非常的强大.感觉是比E ...

  7. webpack配置这一篇就够

    最近看了一篇好文,根据这个文章重新梳理了一遍webpack打包过程,以前的一些问题也都清楚了,在这里分享一下,同时自己也做了一些小的调整 原文链接:http://www.jianshu.com/p/4 ...

  8. 转:深入Java集合学习系列:HashMap的实现原理

    1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现(Hashtable跟HashMap很像,唯一的区别是Hashtalbe中的方法是线程安全的,也就是同步的).此实现提供所 ...

  9. 【集美大学1411_助教博客】团队作业10——项目复审与事后分析(Beta版本)

    写在前面的话 软件工程课结束了,大家开心吗?是不是再也不用熬夜写代码了?如果这门课你真的熬夜写代码了,相信你一定有收获,如果这门课结束了你觉得是自己一个全新的开始,那么这门课的意义就实现了.团队作业全 ...

  10. 第06周-接口、内部类与Swing

    1. 本周作业简评与建议 作业简评 Q1.覆盖clone需要:a.要implements标记接口 Cloneable接口.b.要区分浅拷贝与深拷贝.c.一般来说要调用super.clone,然后在此基 ...