需求:
在同一台服务器上架设多个web站点,每个站点拥有独立的域名,但共用相同ip
实现:
根据需求分析,则通过apache的基于主机名的虚拟主机(一个IP地址,多个网站)方式实现。
术语"虚拟主机"是指在一个机器上运行多个网站(比如:www.company1.com和www.company2.com)。如果每个网站拥有不同的IP地址,则虚拟主机可以是"基于IP"的;如果只有一个IP地址,也可以是"基于主机名"的,其实现对最终用户是透明的。
相关模块 | 相关指令 |
---|---|
step 1 :指定服务器IP地址(和可能的端口)来使主机接受请求
NameVirtualHost指令配置
如果服务器上所有的IP地址都会用到,你可以用"*"作为NameVirtualHost的参数
step 2 :每个虚拟主机建立<VirtualHost>段
<VirtualHost>的参数与NameVirtualHost的参数必须是一样的
<VirtualHost>中至少包含ServerName和DocumentRoot
ServerName指令来指定伺服哪个主机
DocumentRoot指令来说明这个主机的内容位于文件系统的什么地方
step 3 :取消中心主机(Mainhost)
如果你想在现有的web服务器上增加虚拟主机,你必须也为现存的主机建造一个<VirtualHost>定义块;
这个虚拟主机中ServerName和DocumentRoot所包含的内容应该与全局的ServerName和DocumentRoot保持一致;
还要把这个虚拟主机放在配置文件的最前面,来让它扮演默认主机的角色。
例:
NameVirtualHost *:80 #默认主机,如果直接使用ip或者www.domain.tld都能访问 <VirtualHost *:80> ServerName www.domain.tld ServerAlias domain.tld *.domain.tld DocumentRoot /www/domain </VirtualHost> #使用www.otherdomain.tld能访问 <VirtualHost *:80> ServerName www.otherdomain.tld DocumentRoot /www/otherdomain </VirtualHost>
相关问题:
1、开始配置时,自己胡乱的copy,出现了各种问题,然后就是有一阵的胡乱copy,最终还是不能解决。
解决:静下心来,看看比较官方全面的文档,比如Apache HTTP Server Version 2.2 文档,很多东西就引刃而解了
2、apache重启遇到Could not reliably determine the server's fully qualified domain name
解决:在/etc/httpd/conf/httpd.conf中修改ServerName localhost:80(其他你自己的域名也行)
3、所有的请求相应都的是配置中的第一个与虚拟主机的(www.domain.tld或www.otherdomain.tld都给解析的是/www/domain下的站点)
解决:原来是没有设置NameVirtualHost 造成的,一定别忘了了设置NameVirtualHost
4、访问虚拟主机配置的第二个域名www.otherdomain.tld时老是去跳转到apache的默认页去
开始以为是虚拟主机的配置原因,查了很久没能查出具体原因,后面用firebu查看了网络请求,看到了一个403
解决:原来是centos中apache将403给我转到了一个它的一个默认页面,还以为是我的配置问题呢,然后给以授权,问题解决
参考:
[1] Apache虚拟主机文档
[2] 基于主机名的虚拟主机