Apache -- Virtual Hosts

简介:

所谓虚拟主机,就是指一台服务器作为多域名的Web服务器。ISP经常通过一台服务器为其客户提供Web服务。而客户通常希望主页以自己的名字出现,而不是在该ISP的名字后面,因为使用单独的域名和根网址可以看起来更正式一些。传统上,用户必须自己设立一台服务器才能达到拥有单独域名的目的,然而这需要维护一个单独的服务器。很多小单位缺乏足够的维护能力,更为合适的方式是租用别人维护的服务器。ISP也没有必要为一个机构提供一个单独的服务器,完全可以使用虚拟主机的能力,使服务器为多个域名提供Web服务,而且不同的服务互不干扰,对外就表现为多个不同的服务器。虚拟主机就是解决这种问题的方案,使客户的域名实际指向ISP的同一台服务器。


1.Apache支持虚拟主机的方式

Apache有两种支持虚拟主机的方式。一是为每一个虚拟主机设置单独的httpd进程,二是为所有的主机设置一个单独的httpd进程。


          为每一个虚拟机设置单独的httpd进程

在httpd.conf文件的第一部分Global Environment中的BindAddress命令或Listen命令就是用来指定虚拟主机的地址和端口的。

BindAddress命令用来指定单一的地址,可以使用域名或IP地址。该命令在httpd.conf文件中只能出现一次。

Listen命令可以让httpd进程监听多个地址或端口。反复使用Listen命令就能实现这个要求。


          为所有的主机设置一个单独的httpd进程

这是一个常用的方法。用户只要维护一个httpd.conf文件。在此文件的第三部分Virtual Host中,用<VirtualHost></VirtualHost>命令来为所有的虚拟主机进行配置。有多个虚拟主机就有多个<VirtualHost>段。在不同的虚拟主机的<VirtualHost>段中可以指定不同的ServerAdmin、 ServerName、DocumentRoot、ErrorLog和TransferLog。


2.虚拟主机的实现方式

虚拟主机有三种实现方式:以主机名称的方式虚拟、以IP的方式虚拟、以端口的方式虚拟。下面就举一个在httpd.conf的第三部分Virtual Host中实现上面提及的方式的例子。

以主机名称的方式虚拟

如果用户的一台服务器有多个域名,Virtual Host文件举例如下:

NameVirtualHost 210.12.195.6

<VirtualHost hacker.com.cn>

ServerAdmin admin@wonlu.com

DocumentRoot /var/www/html/hacker

ServerName hacker.com.cn

</VirtualHost>


<VirtualHost pcfrient.com.cn>

ServerAdmin admin@pcfrient.com.cn

DocumentRoot /var/www/html/pcfrient

Servername pcfrient.com.cn

</VirtualHost>


以IP的方式虚拟

注册域名是要花一笔费用的。解决方案是可以用IP的方式来虚拟。在Linux中可以为一个网卡捆绑两个IP地址。如服务器的地址是 210.12.195.6,现在有一个IP地址210.12.195.9没有使用。将210.12.195.9捆绑到服务器的网卡中,执行下列命令:

#ifconfig eth0:0 210.12.195.9

这样,服务器就有两个IP地址了。以IP的方式虚拟和以主机名称的方式虚拟类似,请看下面的例子:

NameVirtualHost 210.12.195.6

<VirtualHost 210.12.192.6>

ServerAdmin admin@wonlu.com

DocumentRoot /var/www/html/hacker

</VirtualHost>


<VirtualHost 210.12.192.9>

ServerAdmin admin@wonlu.com

DocumentRoot /var/www/html/pcfrient

</VirtualHost>

以IP的方式虚拟不用NameVirtualHost命令。



以主机名称和IP的方式虚拟

就是上面的两个方式的结合。看下面的例子:

NameVirtualHost 210.12.195.6

<VirtualHost hacker.con.cn>

ServerAdmin admin@wonlu.com

DocumentRoot /var/www/html/hacker

ServerName hacker.com.cn

</VirtualHost>

<VirtualHost 210.12.195.6>

ServerAdmin admin@wonlu.com

DocumentRoot /var/www/html/pcfrient

</VirtualHost>


以端口的方式虚拟

http默认的端口是80,如果用户要开设另一个端口443作为另一个虚拟主机,举例如下:

Listen 80

Listen 443

<VirtualHost 210.12.192.6:80>

ServerAdmin admin@wonlu.com

DocumentRoot /var/www/html/hacker

</VirtualHost>

<VirtualHost 210.12.195.6:443>

ServerAdmin admin@wonlu.com

DocumentRoot /var/www/html/pcfrient

</VirtualHost>


以不同的IP和端口的方式虚拟

该方式是以IP的方式虚拟和以端口的方式虚拟的结合。假设服务器捆绑了两个IP地址,210.12.192.6和210.12.195.9,后面的IP地址用端口443。举例如下:

Listen 210.12.192.6:80

Listen 210.12.195.9:443

<VirtualHost 210.12.192.6:80>

ServerAdmin admin@wonlu.com

DocumentRoot /var/www/html/hacker

</VirtualHost>

<VirtualHost 210.12.195.9:443>

ServerAdmin admin@wonlu.com

DocumentRoot /var/www/html/pcfrient

</VirtualHost>


     本文转自Tar0 51CTO博客,原文链接:http://blog.51cto.com/tar0cissp/1346535,如需转载请自行联系原作者




相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
Linux Apache 开发工具
Configure Apache Virtual Hosts - CentOS 7
Difficulty: 2Time: 15 minutes Want to host websites on your server? Using Apache? Great. This article will show you how to do exactly that using Apache’s “virtual hosts.
1303 0
|
1天前
|
消息中间件 关系型数据库 MySQL
Apache Flink CDC 3.1.0 发布公告
Apache Flink 社区很高兴地宣布发布 Flink CDC 3.1.0!
155 0
Apache Flink CDC 3.1.0 发布公告
|
1天前
|
Java 关系型数据库 数据库连接
实时计算 Flink版操作报错之遇到错误org.apache.flink.table.api.ValidationException: Could not find any factory for identifier 'jdbc',该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1天前
|
消息中间件 Java Kafka
实时计算 Flink版操作报错之Apache Flink中的SplitFetcher线程在读取数据时遇到了未预期的情况,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
6天前
|
Oracle 关系型数据库 数据库
实时计算 Flink版操作报错合集之执行Flink job,报错“Could not execute SQL statement. Reason:org.apache.flink.table.api.ValidationException: One or more required options are missing”,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
66 0
|
6天前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之遇到报错:Apache Kafka Connect错误如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
70 5
|
6天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之报错:org.apache.flink.table.api.validationexception如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
88 1
|
6天前
|
存储 SQL 关系型数据库
实时计算 Flink版操作报错合集之报错:WARN (org.apache.kafka.clients.consumer.ConsumerConfig:logUnused)这个错误如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
38 3

热门文章

最新文章

推荐镜像

更多