目前共有1篇帖子。 内容转换:不转换▼
 
点击 回复
397 0
[Ubuntu]ubuntu server 10.4下Apache2的三种虚拟主机的实现
UTC+13:00
張樹人
中级工程师 十级
1楼 发表于:2011-2-11 02:56
前言:
在上一篇学习了LAMP安装后,想较深入的学习下Apache,http://www.apache.org/是她的官方网站,http://httpd.apache.org/docs/2.2/这是官方的手册,http://lamp.linux.gov.cn/Apache/ApacheMenu/index.html这是中文的手册。这里就不再说安装了,只学习相关的配置。什么是虚拟主机?它的优点有哪些?主要应用在哪里?可以看一下“百度百科”http://baike.baidu.com/view/7383.htm?fr=ala0_1_1
引用百度百科:虚拟主机的关键技术在于,即使在同一台硬件、同一个操作系统上,运行着为多个用户打开的不同的服务器程式,互不干扰。而各个用户拥有自己的一部分系统资源(IP地址、文档存储空间、内存、CPU时间等)。虚拟主机之间完全独立,在外界看来,每一台虚拟主机和一台单独的主机的表现完全相同。所以这种被虚拟化的逻辑主机被形象的称为“虚拟主机”。
虚拟主机还有一兄弟叫“虚拟机”,它的产品有:全球首款中国人自己设计的高速虚拟机VMLite(创始人骆辉红博士);VMware的相关产品 VMware Workstation,VMware Server等;微软的Virtual pc ,Hyper-V;开源的VirtualBox,OpenVZ;红帽企业级虚拟化RHEV;KVM等。感兴趣的可以去http://www.xuniji.com/forum/看看。
但是,虚拟主机与虚拟机是不同的东西,不要混淆了。
操作:
1,Apache的配置文件
(1)apache的相关信息,通过apache2 命令,可以了解一些apache的信息
学习apache2的用法
#man apache2
#apache2 –V(大写)


可以看apache的版本是2.2.14,使用的MPM是prefork。
#sudo cat /etc/apache2/envars

可以看到运行apache的用户和组是www-data。
(2)apache2的相关配置文件在/etc/apache2下
apache2.conf 是全局配置文件,也是主配置文件
conf.d 一般性的配置
envvars 存放环境变量
httpd.conf 用户配置文件
mods-available 已安装的可用模块
mods-enabled 已启用的模块
ports.conf httpd服务的端口号
sites-available 可用的虚拟主机
sites-enabled 启用的虚拟主机
(3)apache的模块的启用和禁止
启用一个模块
#sudo a2enmod 模块名
禁止一个模块
#sudo a2dismod 模块名
搜索想要的模块
#sudo apt-cache search libapache2-mod
找到想要的模块后,用以下命令安装
#sudo apt-get install 模块名
在/etc/apache2/mods-available 是已安装的可用模块,/etc/apache2/mods-enabled 是已启用的模块
(4)启用和禁止虚拟站点
启用一个站点
#sudo a2ensite 站点名
禁止一个站点
#sudo a2dissite 站点名
(5)apache的网页放到哪了?
默认在/var/www目录下,可以通过DocumentRoot关键字定义你想存放的位置,这个在虚拟主机定义时就会用到,安装完以后只有一个有 效虚拟主机/etc/apache2/sites-available/default,也是在这个文件里定义DocumentRoot,这个根据自己的 需要进行合理的规划。
2,虚拟主机,可以参考http://lamp.linux.gov.cn/Apache/ApacheMenu/vhosts/index.html中关于虚拟主机的讲解。
有三种方式实现虚拟主机,一是基于同一IP,不同端口的虚拟主机;二是同一端口,不同IP的虚拟主机;三是基于同一IP,同一端口,不同名字的虚拟 主机。但是由于SSL协议先天特性决定了基于域名的虚拟主机无法成为SSL安全服务器,所以想使用SSL的,就不能用基于主机名的虚拟主机。
与虚拟主机有关系的一个文件那就是ports.conf,因为它定义了httpd服务要监听IP及端口号,默认情况是


*代表是本机上所有IP
(1)基于域名的虚拟主机
1-1.先把/etc/apache2/ports.conf改成以下内容:



1-2,建一个以www.labtest.com为域名的虚拟主机
$ cd sites-available/
$ sudo cp default  labtest
$sudo vim labtest


其它内容先暂不做修改
1-3,在/var/www下建labtest目录,并新建一测试用的index.html
$sudo mkdir /var/www/labtest
$sudo vim /var/www/labtest/index.html

1-4,启用虚拟主机labtest
$sudo a2ensite labtest
$sudo /etc/init.d/apache2 reload
1-5,在一测试机上如下设置,因为这里没有配置DNS,如果DNS配置好了,就把测试机上的DNS服务器指到相应的DNS上。
如果是在ubuntu系统上测试,则:
$sudo vim /etc/hosts
添加以下内容
192.168.3.5        www.labtest.com
如果是在windows xp 上测试,则:
在c:\WINDOWS\system32\drivers\etc\hosts里添加
192.168.3.5        www.labtest.com
在浏览器中输入http://www.labtest.com,看是否显示labtest1,若是则成功。
在做实验过程中出现以下问题 :
重新reload 时,提示以下警告


解决方法是:在/etc/apache2/apache2.conf里加入
ServerName ubuntulab(本机的计算机名)

出现以下警告


解决方法是:


就是把<VirtualHoat 192.168.3.5>改成<VirtualHoat 192.168.3.5:80>
出现以下警告


这phpmyadmin引起的错误,
解决方法:
在/etc/apache2/apache2.conf 中去掉
Include /etc/phpmyadmin/apache.conf
在http://ubuntuforums.org/archive/index.php/t-829124.html中有对这个问题的讨论,在上篇关于LAMP的安装中,就发现不加这句配置,phpmyadmin也是可以成功运行。
/etc/apache2/conf.d/phpmyadmin.conf是/etc/phpmyadmin/apache.conf的一个链接文件。
在/etc/apache2/conf.d/phpmyadmin.conf中


这句配置是一定有的,如果没有phpmyadmin是不能成功运行的。
(2)基于不同IP,同端口的虚拟主机
2-1,给网卡eth0配置第二个IP地址
$sudo ifconfig eth0:0 192.168.3.51 netmask 255.255.255.0 broadcast 192.168.3.255 up
2-2,把/etc/apache2/ports.conf中的NameVirtualHost 给注释掉,否则在重启apache2时会出错。

2-3,修改站点配置文件default,labtest,在/etc/apache2/sites-available目录下
default的配置改为:<VirtualHoat 192.168.3.5>
labtest的配置改为:<VirtualHoat 192.168.3.51>
其它配置不变。
2-4,启动虚拟主机,重新载入 apache服务器
$sudo a2ensite default
$sudo a2ensite labtest
$sudo /etc/init.d/apache2 reload
2-5,配置DNS服务器或在hosts文件中做相应的修改
192.168.3.5  www.lab.com
192.168.3.51   wwww.labtest.com
在浏览器中不同的输入IP或域名,会显示不同的内容则成功。
在实验过程中出现以下问题:


第一错误的解决方法是在/etc/hosts里添加
192.168.3.51 ubuntulab(本机的计算机名)
因为192.168.3.51是后面添加的IP,没有解析到主机名
第二个警告的解决方法是:有一个虚拟主机也采用了192.168.3.5的IP ,引起了IP地址的重复,查看/etc/sites-enabled下启用的虚拟主机采用的IP地址是否与192.168.3.5重复,若是则改为其它IP即可。
第三个警告是由于没有把/etc/apache2/ports.conf中的NameVirtualHost 给注释掉引起的,该配置只用于基于域名的虚拟主机。
(3)基于不同端口,同IP的虚拟主机
3-1,修改/etc/apache2/ports.con文件为


3-2,修改站点配置文件default,labtest,在/etc/apache2/sites-available目录下
default的配置改为:<VirtualHoat 192.168.3.5:80>
labtest的配置改为:<VirtualHoat 192.168.3.5:808>
3-3,启动虚拟主机,重新载入 apache服务器
$sudo a2ensite default
$sudo a2ensite labtest
$sudo /etc/init.d/apache2 reload
3-4,测试
在浏览器里访问时就要加上端口号如:
http://192.168.3.5
http://192.168.3.5:808或http://www.labtest1.com:808
做实验时发现在port.conf不可写成


或Listen 80,808 前者重新载入apache2时不会出现错误信息,但是访问是不成功的,后者会出现如下错误信息


告诉你语法错误。
3,虚拟主机的配置文件,以一个虚拟主机为例。更多的指令可以阅读http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/directives.html#A
<VirtualHost 192.168.3.5:808>
        ServerAdmin admin@labtest.com
#网站管理员的EMAIL邮件地址
        DocumentRoot /var/www/labtest1
#网站的根目录,一般要设置为绝对的路径,否则将认为它的父目录为在/etc/apache2/apache2.conf里ServerRoot指定的路径
#       ServerName www.labtest1.net
#在设置基于域名虚拟主机时,指定虚拟主机的域名
        <Directory />
                Options FollowSymLinks
#FollowSymLinks,允许在些目录中使用符号链接
                AllowOverride None
#AllowOverride ,是针对.htaccess文件的。其值有all,none,AuthConfig,FileInfo,Indexes,Limit
        </Directory>
        <Directory /var/www/labtest1>
                Options Indexes FollowSymLinks MultiViews
#MultiViews,允许内容协商的多重视图。内容协商由mod_negotiation模块生成。
                AllowOverride None
                Order allow,deny
#Order:指定对目录的访问控制及allow,deny的生效顺序。如果是allow,deny则是allow先于deny生效,默认拒绝所有 访问,任何不匹配allow或是匹配deny的访问都被拒绝;如果是deny,allow则是deny先于allow生效,默认是允许所有访问,任何不匹 配deny或是匹配allow的访问都被允许访问。
                allow from all
#allow:控制哪些主机可以访问,from是固有的,后面可以是主机名,IP地址,IP范围,域名等。例:
#allow from labtest.com
#allow from .labtest.com
#allow from 192.168.3.5/255.255.255.0
#allow from 192.168.3.5/24
#allow from 192.168.3.100 192.168.3.101
#
        </Directory>
        ScriptAlias /cgi-bin/ /var/www/labtest1/cgi-bin/
# ScriptAlias:它标明/var/www/labtest1/cgi-bin目录下只有CGI脚本,同时与Alias一样用于在URL和文件系统路径之间实现映射,使不在DocumentRoot目录下的内容也能成为文档树的一部分
        <Directory "/var/www/labtest1/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
#ExecCGI:允许该目录下通过mod_cgi执行CGI脚本
#SymLinksIfOwnerMatch:只允许使用与目标目录或文件的拥有者具有相同的USERID的符号链接
#+与-:一般来说,在一个目录上设置了多次的Options,则最特殊的一个会被完全接受,而其他的则会被忽略;然而,加上+或-时,所有带+的选项将强制覆盖当前的设置,所有带-的选项将强制从当前设置中去除。
                Order allow,deny
                Allow from all
        </Directory>
        ErrorLog /var/log/apache2/labtest1/error.log
#定义错误的日志:在/var/log/apache2下一定要事先建好labtest1的目录,否则会出错。
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
#LogLevel:定义日志的级别
#emerg 紧急
#alert 必须立即采取措施
#crit 致命的情况
#error 错误
#warn 警告
#notice 重要
#info 普通
#debug 调试
        CustomLog /var/log/apache2/labtest1/access.log combined
#CustomLog:指令用来对服务器的请求进行日志记录。combined第二个参数指定了写入日志文件的内容
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
CustomLog log/acces_log combined
可参考http://httpd.apache.org/docs/1.3/logs.html
        ServerSignature On
#ServerSignature:指令允许您配置服务器端生成文档的页脚(错误信息、     mod_proxy的ftp目录列表、
mod_info的输出)。有三个值:On,Off,Email;on会简单的增加一行关于服务器版本和正在伺服的虚拟主机的ServerName;Off 设置没有错误行(这样便与Apache1.2及更旧版本兼容;EMail 设置会如文档中说明的那样额外创建一个指向ServerAdmin的"mailto:"部分。对于2.0.44以后的版本,显示的详细服务器版本号将由ServerTokens指令控制。
    Alias /files/ "/var/www/labtest1/files/"
#Alias:使不在DocumentRoot目录下的内容也能成为文档树的一部分,也叫虚拟目录。值得注意的是/files/与/files是有 区别的,在此你有/,那么在访问时也一定要有/。访问都必须要知道有这个别名,才能访问。例:http://192.168.3.5:808/files /,如果没有写/files/是不能访问的。
    <Directory "/var/www/labtest1/files/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
#        Deny from all
         Allow from 127.0.0.0/255.0.0.0 ::1/128
   </Directory>
 
结束语:
三种实现虚拟主机的方法中涉及到/etc/apache2目录下三个文件ports.conf httpd服务的端口号,sites-available 可用的虚拟主机,sites-enabled 启用的虚拟主机;ports.conf在三种方式下要做相应的修改,NameVirtualHost只在基于域名虚拟主机用到。做web服务器必然涉及到 DNS服务相关配置,在这里我只是学习了虚拟主机的实现,还有很多其它的配置及优化没涉及。
 
 
 
本文出自 “匠人” 博客,请务必保留此出处http://xuchengji.blog.51cto.com/160472/387247

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:397 回复数:0
评论数: ?
作者:張樹人
最后回复:張樹人
最后回复时间:2011-2-11 02:56
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。