ubuntu server 10.4下Apache2的三种虚拟主机的实现

简介:

前言:

在上一篇学习了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(大写)

apache01

可以看apache的版本是2.2.14,使用的MPM是prefork。

#sudo cat /etc/apache2/envars

apache02

可以看到运行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及端口号,默认情况是

apache03

*代表是本机上所有IP

(1)基于域名的虚拟主机

1-1.先把/etc/apache2/ports.conf改成以下内容:

apache07

1-2,建一个以www.labtest.com为域名的虚拟主机

$ cd sites-available/ 
$ sudo cp default  labtest

$sudo vim labtest

apache08

其它内容先暂不做修改

1-3,在/var/www下建labtest目录,并新建一测试用的index.html

$sudo mkdir /var/www/labtest

$sudo vim /var/www/labtest/index.html

apache09

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 时,提示以下警告

apache10

解决方法是:在/etc/apache2/apache2.conf里加入

ServerName ubuntulab(本机的计算机名)

出现以下警告

apache11

解决方法是:

apache08

就是把<VirtualHoat 192.168.3.5>改成<VirtualHoat 192.168.3.5:80>

出现以下警告

apache06

这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中

apache12

这句配置是一定有的,如果没有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时会出错。

apache15

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或域名,会显示不同的内容则成功。

在实验过程中出现以下问题:

apache14

第一错误的解决方法是在/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文件为

apache004

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:808http://www.labtest1.com:808

做实验时发现在port.conf不可写成

apache003 或Listen 80,808

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

apache002

告诉你语法错误。

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服务相关配置,在这里我只是学习了虚拟主机的实现,还有很多其它的配置及优化没涉及。

 

 

 

本文转自xcjgutong 51CTO博客,原文链接:http://blog.51cto.com/xuchengji/387247


相关文章
|
1月前
|
Ubuntu Java 测试技术
【Linux】一站式教会:Ubuntu(无UI界面)使用apache-jmeter进行压测
【Linux】一站式教会:Ubuntu(无UI界面)使用apache-jmeter进行压测
|
6月前
|
Ubuntu 安全 Linux
百度搜索:蓝易云【Ubuntu 20.04 安装VNC Server的教程。】
请注意,VNC连接是以明文形式传输数据的,因此建议在安全的网络环境中使用VNC,并设置强密码以确保安全性。
191 1
|
7月前
|
网络协议 网络安全 Apache
Apache 虚拟主机里的 ServerName 指令
Apache 虚拟主机里的 ServerName 指令
195 1
|
9月前
|
安全 网络安全 API
Apache虚拟主机的三种实现方式
Apache虚拟主机的三种实现方式
270 0
|
8月前
|
域名解析 Linux 网络安全
Apache配置虚拟主机----基于域名的虚拟主机技术
Apache配置虚拟主机----基于域名的虚拟主机技术
160 0
|
Kubernetes 网络协议 Ubuntu
Kubeadm 快速搭建 k8s v1.19.1 集群(Ubuntu Server 20.04 LTS)
安装准备工作安装环境要求:角色 实验环境 生产环境 操作系统 master cpu/内存:2 Core/2G cpu/内存:2 Core/4G linux 内核 4.4+ node cpu/内存:1 Core/2G cpu/内存:4 Core/16G linux 内核 4.4+ 备注 Node:应根据需要运行的容器数量进行配置; Linux 操作系统基于 x86_64 架构的各种 Linux 发行版...
962 2
Kubeadm 快速搭建 k8s v1.19.1 集群(Ubuntu Server 20.04 LTS)
|
5月前
|
存储 缓存 NoSQL
如何解决Ubuntu server 下 Redis安装报错:“You need tcl 8.5 or newer in order to run the Redis test”.
如何解决Ubuntu server 下 Redis安装报错:“You need tcl 8.5 or newer in order to run the Redis test”.
138 0
|
1月前
|
存储 Ubuntu 网络安全
|
7月前
|
域名解析 Apache PHP
PHP Apache - 多站点虚拟主机配置
PHP Apache - 多站点虚拟主机配置
291 0
|
4月前
|
Ubuntu 网络安全 虚拟化
【Ubuntu】Win11 VmWare虚拟机安装Ubuntu 22.04.1-server
【Ubuntu】Win11 VmWare虚拟机安装Ubuntu 22.04.1-server
117 1
【Ubuntu】Win11 VmWare虚拟机安装Ubuntu 22.04.1-server