linux下apache2的虚拟主机配置
1,起因
在一星期前吧,大波说既然咱们有了自己的服务器,二级域名了。可以考虑怎样每人一个域名,分别指向我们各自的空间。想法挺好,避免我们个人的东西放在同一主页上。那就做吧
2,第一次尝试
(1)在域名在万网买的,他们有个服务是支持泛域名解析。选择这个服务后,所有的三级域名 www.*.xin3e.com 都可以指向 www.xin3e.com的IP地址。
(2)按照这个链接的方法进行尝试:http://hsst.blog.sohu.com/52046690.html
因为Ubuntu下,Apache2的配置文件及目录结构不大一样,所以mods-avalilable下的是可用的模块。而真正启用了的模块是在mods-enable目录底下的。自己创建软连接实现启用rewrite模块。
sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
(3)sudo vi /etc/apache2/sites-enabled/000-default
将其中所有的AllowOverride None 修改成 AllowOverride All.
备注:000-default实则为sites-available/default的链接,而AllowOverride None则会完全忽略.htaccess文件,rewrite规则就不能生效
(4)在httpd.conf文件末尾加上类似以下配置:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[a-zA-Z0-9]+\.xin3e\.com$
RewriteRule ^$ /%{HTTP_HOST}
RewriteRule ^/([a-zA-Z0-9]+)\.xin3e\.com/?$ /web/zyb/index [R]
(5)重启apache,没有效果。
3,第二次尝试
(1)删除上一次第(4)步在httpd.conf文件的操作。 原apache2的httpd.conf文件是空的,现只保留ServerName localhost
(2)配置虚拟主机的目录。
什么是虚拟主机(Virtual Host)。所谓的虚拟主机,基本上就是“让你的一台服务器上,有好多个‘主页面’存在。也就是说,硬件实际上只有一台主机,但由网址上来看,则视乎有好多台主机存在的样子”。举个例子:
www.xin3e.com ==> IP/www/index.php
IP/www目录下还有IP/www/zyb,IP/www/fb两个目录。那么:
www.zyb.xin3e.com ==> IP/www/zyb
www.fb.xin3e.com ==> IP/www/fb
两个域名指向同一IP地址,进去则是不同的信息内容。这就是虚拟主机的主要功能,它可以让你的多级域名对应不同的主网页目录(DocumentRoot 参数),所以看起来像有多台实际主机的样子。
有1)基于IP地址的虚拟主机配置,2) 基于IP和多端口的虚拟主机配置,3)单个IP地址的服务器上基于域名的虚拟主机配置,4)在多个IP地址的服务器上配置基于域名的虚拟主机。今天只展示单个IP地址的服务器上基于域名的虚拟主机配置。
(3)修改配置文件 /etc/apache2/sites-available/default
添加:
<VirtualHost *:80>
ServerName www.zyb.xin3e.com
DocumentRoot /home/normal/website/zyb
ServerAlias zyb.xin3e.com
ErrorLog /var/log/apache2/error-zyb.xin3e.com.log
</VirtualHost>
Apache中涉及到的相关选项说明:
ServerName (设定虚拟主机的名称)
DocumentRoot (指定虚拟主机的网站主目录)
ServerAlias (设定虚拟主机的別名)
ErrorLog (虚拟主机发生错误时要记录在哪个目录,可不设)
(4)保存,重启apache2
sudo /etc/init.d/apache2 restart
(5)测试,成功。
备注:这是大波一星期前给我提的想法,上星期尝试失败后,一周没找到合适的时间。今天给了个了解。其实虚拟主机配置中一般都包含<Directory></Directory>进行目录的详细配置,但我还不甚了解其作用和必要性。暂时未处理。欢迎大家留言。