httpd之虚拟主机和默认虚拟主机
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了httpd之虚拟主机和默认虚拟主机相关的知识,希望对你有一定的参考价值。
原理介绍
基于IP地址的虚拟主机
不同的主机名解析到不同的IP地址,提供虚拟主机服务的机器上同时设置有这些IP地址。服务器根据用户请求的目的IP地址来判定用户请求的是哪个虚拟主机的服务,从而进一步的处理。
缺点:既浪费了IP地址,又限制了一台机器所能容纳的虚拟主机数目。因此这种方式越来越少使用。但是,这种方式是早期使用的HTTP 1.0协议唯一支持的虚拟主机方式。
基于主机名的虚拟主机
HTTP 1.1协议中增加了对基于主机名的虚拟主机的支持。具体说,当客户程序向WWW服务器发出请求时,客户想要访问的主机名也通过请求头中的“Host:”语句传递给WWW服务器。WWW服务器程序接收到这个请求后,可以通过检查“Host:”语句,来判定客户程序请求是哪个虚拟主机的服务,然后再进一步的处理。
优点:提供虚拟主机服务的机器上只要设置一个IP地址,理论上就可以给无数多个虚拟域名提供服务,占用资源少,管理方便。目前基本上都是使用这种方式来提供虚拟主机服务。
缺点:在早期的HTTP 1.0版本下不能使用。实际上现在使用的浏览器基本上都支持基于主机名的虚拟主机方式。
虚拟主机需要的元素
<VirtualHost HOST>
ServerName
#主机名- ServerAlias
#主机名的别名
DocumentRoot /www/test.com #虚拟主机的家目录
# 对文件系统中路径的访问控制
<Directory “/www/test.com”>
Options none
AllowOverride AuthConfig
AuthName "Private"
AuthType Basic
AuthUserFile /www/passwords/passwd.dbm
Require valid-user
</Directory>
# 对DocumentRoot中路径的访问控制
<Location "/image"> #此处相当于对
/www/test.com/image的访问控制- Order deny,allow
- Deny from all
</Location>
Alias "/icon/" "/var/www/html/image/icon"
ErrorLog
CustomLog
ScriptAlias
</VirtualHost>
CGI:Common Gateway Interface,通用网管接口/协议,apache可以调用外部的解释器,解释器处理后会将结果返回给apache(服务器端动态)
虚拟主机的定义
先注销中心主机。方法注释DocumentRoot即可
Host的写法
基于IP | 基于端口 | 基于域名 |
IP1:80 IP2:80 | IP:80 IP:8080 | *:80或者IP:80ServerName不同 |
网卡别名:
ip addr add 192.168.8.61/24 dev eth0
测试各种虚拟主机
/usr/local/apache2/bin/httpd -S
实例
<VirtualHost 192.168.8.60:80>
# ServerAdmin [email protected]
DocumentRoot /www/www.t.com
ServerName www.t.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
<VirtualHost 192.168.8.60:80>
# ServerAdmin [email protected]
DocumentRoot /www/www.test.com
ServerName www.test.com
ErrorLog logs/test.com-error_log
CustomLog logs/test.com-access_log combined
<Directory "/www/www.test.com">
Options none
AllowOverride none
Order deny,allow
Deny from 192.168.8.104
</Directory>
</VirtualHost>
<VirtualHost 192.168.8.61:80>
# ServerAdmin [email protected]
DocumentRoot /www/www.hiyang.com
ServerName www.hiyang.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
<VirtualHost 192.168.8.60:8080>
# ServerAdmin [email protected]
DocumentRoot /www/www.a.com
ServerName www.a.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
定义:index.html文件
默认虚拟主机(基于主机名)
默认虚拟主机是在定义虚拟主机时的第一个虚拟主机。一般情况下,别人的主机名可以解析到本地的IP后对访问到默认的虚拟主机,为了避免出现恶意的解析,通常将默认虚拟主机禁用。
可以设置Apache对默认虚拟主机DocumentRoot没有访问权限,可以在文件系统级别设置,或者配置文件级别设置。
1)匹配所有不合法的访问
<VirtualHost _default_:*>
DocumentRoot "/www/default"
</VirtualHost>
<VirtualHost IP:80>
DocumentRoot /www/www.a.com
ServerName www.a.com
</VirtualHost>
也可以,通过order实现
<VirtualHost IP:80>
DocumentRoot /www/www.a.com
ServerName www.a.com
<Directory “/www/www.a.com”>
Order deny,allow
Deny from all
</Directory>
</VirtualHost>
本文出自 “hiyang” 博客,请务必保留此出处http://hiyang.blog.51cto.com/10728919/1786205
以上是关于httpd之虚拟主机和默认虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章