轻松配置httpd的虚拟主机
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的虚拟主机的更多相关文章
- php配置虚拟主机的配置步骤(hosts、httpd.conf、vhosts.conf)1.配置本地的dns文件2.配置apache的主配置文件3.配置Apache的虚拟主机
1.域名解析(DNS) 找到C:\Windows\System32\drivers\etc目录下的hosts文件,在里面进行添加对应的内容
- Httpd服务入门知识-Httpd服务常见配置案例之虚拟主机
Httpd服务入门知识-Httpd服务常见配置案例之虚拟主机 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.虚拟主机实现方案 1>.Apache httpd 有三种实现虚 ...
- centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课
centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 ...
- 利用主机域名配置Apache的虚拟主机功能
利用主机域名配置Apache的虚拟主机功能,可以减轻服务器为每一个网站分配IP地址的压力.而且根据不同的主机域名可以输出不同的网页内容.要实现此项功能,可以通过修改/etc/host文件来强制定义IP ...
- nginx配置多个虚拟主机vhost
在nginx下配置虚拟主机vhost非常方便.主要在nginx的配置文件nginx.conf中添加一个server即可 比如我想配置两个虚拟主机,通过域名linux.com和linux2.com访问, ...
- Nginx入门讲解——初步认识了解nginx.conf配置文件以及配置多个虚拟主机
本文引自网络进攻学习之用https://blog.csdn.net/weixin_38111957/article/details/81080539 一. 引言上节文章讲述了如何用信号控制Nginx服 ...
- nginx配置多个虚拟主机(mac)
1 . 安装 通过homebrew安装nginx,默认安装在:/usr/local/Cellar/nginx/版本号.配置文件在路径:/usr/local/etc/nginx ,默认配置文件ngin ...
- 实例:使用playbook实现httpd安装、配置、以及虚拟主机的配置
一.安装环境配置 1.在控制节点给受控主机配置本地仓库文件 [root@ansible ~]# vim /etc/yum.repos.d/dvd.repo [AppStream] name=appst ...
- Apache服务器在80端口配置多域名虚拟主机的方法
我们在配置一台服务器的时候,如果只运行一个站点,往往过于浪费资源.Nginx和Apache都可以通过配置虚拟主机实现多站点.配置虚拟主机的方式主要有两种,一种是多个不同端口对应的多个虚拟主机站点,一种 ...
随机推荐
- fixed定位兼容性
不过从ios5.1以来,fixed定位就已经支持了,但很遗憾,ios现在对它还只是半支持. 但是在某些情况下,会出现一些比较奇葩的问题,比如fixed元素中存在输入框子元素,这个时候就会跪了. 可以看 ...
- Linux的netstat查看端口是否开放见解(0.0.0.0与127.0.0.1的区别)
linux运维都需要对端口开放查看 netstat 就是对端口信息的查看 # netstat -nltp p 查看端口挂的程序 [root@iz2ze5is23zeo1ipvn65aiz ~]# n ...
- 2017 ACM-ICPC(乌鲁木齐赛区)网络赛 H.Skiing 拓扑排序+最长路
H.Skiing In this winter holiday, Bob has a plan for skiing at the mountain resort. This ski resort h ...
- python 斐波那契数列 fibonacci
在python中生成fibonacci数列的函数 def fibonacci(): list = [] while 1: if(len(list) < 2): list.append(1) el ...
- java伪代码《大道至简》
阅读<大道至简>第一章,深感作者对编程问题的精炼定义,通过对古老寓言故事<愚公移山>的引用,说明了编程的本质,即顺序,分支,循环.其中又将他们扮演的项目组织者,团队经理,编程人 ...
- 转:【Java并发编程】之一:可重入内置锁
每个Java对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁.线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁.获得内置锁的唯一途径就是进入由这个锁保护的同步代码块 ...
- 201521123082 《Java程序设计》第10周学习总结
201521123082 <Java程序设计>第10周学习总结 标签(空格分隔): java 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. A ...
- 201521123037 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 1. String[] list1=str.split(" ...
- 201521123047《Java程序设计》第1周学习总结
1. 本章学习总结 学习到了jdk,jvm,jre之间的关系,下载并安装了jdk,学会设置path变量,初步学会建立简单的java程序,并执行成功.初步学会notepad++,eclipse的操作.学 ...
- 201521123109 《java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...