Linux虚拟主机配置

一、概述

虚拟主机(Virtual Host),又称虚拟服务器、主机空间或是网页空间,是一种网络技术,可以让多个主机名称,在一个单一的服务器上运作,而且可以分开支持每个单一的主机名称。虚拟主机可以运行多个网站或服务。虚拟并非指不存在,而是指空间是由实体的服务器延伸而来,其硬件系统可以是基于服务器群,或者单个服务器。其技术是互联网服务器采用的节省服务器硬件成本的技术,虚拟主机技术主要应用于HTTP、FTP、EMAIL等多项服务,将一台服务器的某项或者全部服务内容逻辑划分为多个服务段位,对外表现为多个服务器,从而充分利用服务器硬件资源。——Wiki中对虚拟主机的解释。

虚拟主机的实现方式主要有三种:基于域名的方法(Name-based)、基于IP的方法(IP-based)以及基于端口的方法(Port-based)。下面将结合apache的配置来讲解虚拟主机的各种配置及应用场景。

注:实验环境为CentOS release 6.3(Final)

二、实战演练

1. http配置文件讲解

httpd的默认配置文件为:/etc/httpd/conf/httpd.conf,它主要包含三大部分,如下:

[root@Slaver conf]# grep '\<Section\>' /etc/httpd/conf/httpd.conf -n
33:### Section 1: Global Environment
245:### Section 2: 'Main' server configuration
977:### Section 3: Virtual Hosts
[root@Slaver conf]# 

其中:1)Global Environment——全局配置,决定Apache服务器的全局参数。

2)Main server configuration——主服务配置,相当于是Apache的默认web站点,如果我们的服务器中只有一个站点,那么就只需要在这里配置就可以了。

3)Virtual Hosts——虚拟主机,虚拟主机不能与Main Server主服务器共存,当启用了虚拟主机之后,Main Server就不能使用了。

与虚拟主机相关的配置项有:a)Listen:80指定apache的监听端口,在全局配置区中设置;b)NameVirtualHost:*:80在虚拟主机区域中设置。

2. 基于域名的多站点配置

适用场景:在一台主机上配置两个站点,其域名分别为:www.test01.com、www.test02.com,对应的站点文件存放位置为:/var/www/html/test01和/var/www/html/test02。

满足此应用的相关配置:

a. 修改/etc/httpd/conf/httpd.conf中的配置

i.端口监听开启:Listen 80

ii.虚拟主机配置开启:NameVirtualHost *:80(将前面的注释#去掉)

b. 在/etc/httpd/conf.d/中添加站点的配置文件

注意:在/etc/httpd/conf.d目录下新建站点配置文件,必须确保Include conf.d/*.conf开启。新建配置文件内容如下:

www.test01.conf

[root@Slaver conf.d]# cat www.test01.conf
<VirtualHost *:80>DocumentRoot /var/www/html/test01ServerName www.test01.com<Directory /var/www/html/test01>Options Indexes FollowSymLinksAllowOverride AllOrder Allow,DenyAllow from all </Directory>
</VirtualHost>
[root@Slaver conf.d]#

www.test02.conf

[root@Slaver conf.d]# cat www.test02.conf
<VirtualHost *:80>DocumentRoot /var/www/html/test02ServerName www.test02.com<Directory /var/www/html/test02>Options Indexes FollowSymLinksAllowOverride AllOrder Allow,DenyAllow from all </Directory>
</VirtualHost>
[root@Slaver conf.d]# 

重启httpd:service httpd restart,然后再浏览器中分别访问域名即可。注意:该域名访问的机器必须能够解析到,如果不是公网的域名的话可以通过配置本机的hosts来解析。

c. 上述配置项分析

i.VirtualHost *:80

指定虚拟主机的IP以及端口,其中*:80表示响应来自本机所有网卡的80端口的请求。当然,这里也可以指定特定的IP,例如:VirtualHost 192.168.17.131:80,则它会响应来自192.168.17.131IP的访问请求,与此同时在/etc/httpd/conf/httpd.conf中的NameVirtualHost也必须指定为192.168.17.131或*,不然的话在启动httpd的时候会报出如下的错误:Starting httpd: [Wed Feb 04 22:30:23 2015] [warn] NameVirtualHost 192.168.17.131:80 has no VirtualHosts。

用简单的话来说,NameVirtualHost设定的与具体配置文件中VirtualHost设定的必须为一一对应,或者为*对一(NameVirtualHost为*,其他VirtualHost为具体的IP)。

ii.Options Indexes FollowSymLinks

Options中Indexes表示当网页不存在的时候允许索引显示目录中的文件;FollowSymLinks表示是否允许访问符号链接文件。

iii.AllowOverride All

AllowOverride表示是否允许该配置被覆盖。例如:AllowOverride None表示不允许该Directory目录下的访问控制文件(.htaccess)来改变这里的配置;AllowOverride All表示允许访问控制文件.htaccess来改变这里的配置。

iv.Order Allow,Deny

Order用来表示对页面的访问控制顺序,后面的一项是默认选项,如:Order Allow,Deny则默认是Deny。Allow from all表示允许所有用户。

3. 基于IP的多站点配置

适用场景:web服务器存在多块网卡,有多个IP地址,这里假设有两个IP地址,一个为:192.168.17.128,它对应域名www.test01.com;一个为:192.168.17.131,它对应域名www.test02.com。

a. 存在主服务器

1) 基本配置

还记得在/etc/httpd/conf/httpd.conf中提到的三大块配置,其中就有主服务配置,假设192.168.17.128对应主服务器,而另外一个IP192.168.17.131用于构建两个或多个虚拟主机。配置如下:

192.168.17.128上主服务器配置:

i.监听80端口:Listen 80

ii.主服务器配置区:ServerName www.test01.com

iii.主服务器配置区:DocumentRoot /var/www/html/test01

192.168.17.131上多虚拟主机配置:

虚拟主机配置:VirtualHost 192.168.17.131:80

/etc/httpd/conf.d/中添加www.test02.conf、www.test03.conf的配置,配置内容与“基于域名的多站点配置”等同。

在web浏览器中分别访问:www.test01.com、www.test02.com和www.test03.com会显示各自的输出。

注意:设置主服务器后,所有不是针对192.168.17.131的请求都将由主服务器来伺服;而提交给192.168.17.131却没有主机名或没有Host:头的请求,都将为www.test02.com伺服(因为配置文件中,它最靠前)。

2) 测试场景

需要测试两种情况:

一、不是针对192.168.17.131的请求都将由主服务器来伺服

二、提交给192.168.17.131却没有主机名或没有Host:头的请求,都将为www.test02.com伺服

现在为web服务器配置三个网络,如下图所示:

并在本机的hosts文件中,添加如下IP与域名的对应关系:

访问www.test04.com,页面输出“Welcome to access web site test01 ... ”,验证了不是针对192.168.17.131的请求都将由主服务器来伺服。

访问http://192.168.17.131,页面输出“Welcome to access web site test02 ... ”,验证了提交给192.168.17.131却没有主机名或没有Host:头的请求,都将为www.test02.com伺服。

b. 不存在主服务器

适用场景:假设web服务器有两个IP地址(192.168.17.128和172.20.30.40),该机器内网和外网均可以访问,在外部,域名:www.test01.com指向外部地址172.20.30.40,而在内部同样的域名指向内部地址192.168.17.128。

服务器可以配置为向来自内部和外部的请求提供同样的内容,只需要一个VirtualHost配置段就可以达到这个目的,服务器配置如下:

监听80端口:Listen 80

配置虚拟主机:NameVirtualHost 192.168.17.128:80

NameVirtualHost 172.20.30.40:80

/etc/httpd/conf.d/www.test01.conf配置内容:

[root@Slaver conf.d]# cat www.test01.conf
<VirtualHost 192.168.17.128:80 172.20.30.40:80>DocumentRoot /var/www/html/test01ServerName www.test01.com<Directory /var/www/html/test01>Options Indexes FollowSymLinksAllowOverride AllOrder Allow,DenyAllow from all </Directory>
</VirtualHost>
[root@Slaver conf.d]#

现在从不同网络提交的请求都会由同一个VirtualHost来伺服。

4. 基于端口的多站点配置

适用场景:让同一个IP的不同端口伺服多个域名。例如:通过http://www.test01.com:80访问站点test01,通过http://www.test01.com:8080访问站点test02。配置要点:同一个IP端口不同;域名相同根目录不同

具体配置如下:

i.配置http监听80和8080端口:Listen:80

Listen:8080

ii.配置NameVirtualHost:NameVirtualHost 192.168.17.128:80

NameVirtualHost 192.168.17.128:8080

iii.配置/etc/httpd/conf.d/www.test01.conf,配置如下:

[root@Slaver conf.d]# cat www.test01.conf
<VirtualHost 192.168.17.128:80>DocumentRoot /var/www/html/test01ServerName www.test01.com<Directory /var/www/html/test01>Options Indexes FollowSymLinksAllowOverride AllOrder Allow,DenyAllow from all </Directory>
</VirtualHost><VirtualHost 192.168.17.128:8080>DocumentRoot /var/www/html/test02ServerName www.test01.com<Directory /var/www/html/test02>Options Indexes FollowSymLinksAllowOverride AllOrder Allow,DenyAllow from all </Directory>
</VirtualHost>
[root@Slaver conf.d]#

5. 只允许某个网段访问站点

适用场景:发布到外网的web站点,后台管理文件夹administrator不想让外网的用户可以访问,只允许内网192.168.17.0/24网段的客户机访问。

配置如下:

[root@Slaver conf.d]# cat www.test01.conf
<VirtualHost 192.168.17.128:80>DocumentRoot /var/www/html/test01ServerName www.test01.comErrorLog /var/log/httpd/www.test01.errCustomLog /var/log/httpd/www.test01.access common<Directory /var/www/html/test01/administrator>Options Indexes FollowSymLinksAllowOverride AllOrder Allow,DenyAllow from 192.168.17.0/24</Directory>
</VirtualHost>
[root@Slaver conf.d]# 

当不是通过这个网段进来的访问请求,会出现如下的提示错误:

6. 只允许通过认证的用户访问站点

适用场景:当访问后台时,通过提供用户名和密码进行认证,只有通过认证的用户才能访问后台。

配置文件如下:

[root@Slaver conf.d]# cat www.test01.conf
<VirtualHost 192.168.17.128:80>DocumentRoot /var/www/html/test01ServerName www.test01.comErrorLog /var/log/httpd/www.test01.errCustomLog /var/log/httpd/www.test01.access common<Directory /var/www/html/test01/administrator>Options Indexes FollowSymLinksAllowOverride AuthConfigAuthName "Please input username and password!"AuthType BasicAuthUserFile /etc/httpd/.htpasswdRequire user houqd2012 houqd2015Order Allow,DenyAllow from all</Directory>
</VirtualHost>[root@Slaver conf.d]#

配置项代表的含义如下:

AllowOverride AuthConfig         #采用认证机制

AuthName “Please input username and password!”   #认证时显示的提示语

AuthType Basic                  #用户认证类型

AuthUserFile                    #认证时用户的账号密码文件

Require user houqd2012 houqd2015  #只有houqd2012和houqd2015用户才能登陆

创建用户名和密码的命令如下:

htpasswd -cm /etc/httpd/.htpasswd houqd2012

htpasswd -c /etc/httpd/.htpasswd houqd2015

-c代表创建一个新文件,-m代表密码使用MD5加密,执行完后会生成/etc/httpd/.htpasswd文件。

效果图如下:

三、总结

在开发中好几次遇到虚拟主机的配置问题,每次都是临时查一查解决没有系统的了解,等下次碰到问题时还是解决不了,浪费了很多时间,这次索性集中整理一次,望更多的朋友也了解如何利用虚拟主机更好的我们的生产环境服务。

四、参考链接

a. VirtualHost Examples:http://httpd.apache.org/docs/2.4/vhosts/examples.html

b. Web服务器基础之二Apache主配置文件httpd.conf:http://pvbutler.blog.51cto.com/7662323/1352360

c. 维基百科虚拟主机的解释:http://zh.wikipedia.org/zh-cn/%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA

d. Web服务器(Apache)虚拟主机的配置:http://chenxizhuimeng.blog.51cto.com/2516314/504823

e. 教你如何实现Apahce的用户认证:http://www.linuxidc.com/Linux/2013-04/82422.htm

f. Linux中apache虚拟主机(vhost)多种配置形式:http://www.111cn.net/sys/linux/42471.htm

Linux虚拟主机配置终极篇相关推荐

  1. Linux虚拟主机配置(基于域名)

    虚拟主机(Virtual Host)是一种网络技术,可以让多个主机名称,在一个单一的服务器上运作,而且可以分开支持每个单一的主机名称. 基于域名(主机名)的多站点配置 在一台主机上配置两个站点,其域名 ...

  2. 德国虚拟主机 linux,细说Linux虚拟主机的搭建及配置

    我们知道Linux操作系统是目前在服务器上应用广泛的操作系统.前面我们刚介绍了<Ubuntu虚拟机:如何选择虚拟化软件>,现在来提及Linux系统下的虚拟主机.在Linux操作系统下的虚拟 ...

  3. linux虚拟主机泛解析,Apache虚拟主机的配置和泛域名解析实现代码

    Apache虚拟主机的配置和泛域名解析实现代码 更新时间:2012年03月11日 00:28:19   作者: Apache虚拟主机的配置和泛域名解析实现代码,需要的朋友可以参考下 虚拟主机的配置 基 ...

  4. Linux下Apache虚拟主机配置

    说明: Apache版本:httpd-2.2.31 Apache安装目录:/usr/local/apache 目的: 配置Apache虚拟主机 具体操作: 1.修改Apache主配置文件 cp /us ...

  5. linux apache ip配置,linux apache虚拟主机配置(基于ip,端口,域名)

    配置环境: linux版本:Centos6.4 httpd版本: [[email protected] init.d]# pwd /etc/init.d [[email protected] init ...

  6. linux apache部署php,Linux下apache虚拟主机配置多版本php同时运行 | 系统运维

    学习本教程须掌握: 1.Linux下指定版本编译安装LAMP 2.Linux下Apache虚拟主机配置 3.CentOS 7.x编译安装Nginx1.10.3+MySQL5.7.16+PHP5.2 5 ...

  7. linux下安装iasp以及apache多站点虚拟主机配置

                      安装配置 1.     linux下安装iasp 1.1需要准备的的安装包: httpd-2.0.59.tar.gz(最好选该版本,2.2版本在安装配置完后启动出错 ...

  8. linux apache 多域名配置,apache-2.4.12基于域名访问的多虚拟主机配置

    apache-2.4.12基于域名访问的多虚拟主机配置 原始配置: ServerAdmin kk@etiantian.org DocumentRoot "/data/cms" Se ...

  9. Ubuntu 16.04与Apache虚拟主机配置的步骤详解

    这篇文章主要给大家介绍了关于Ubuntu 16.04与Apache虚拟主机配置的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ubuntu16.04系统具有一定的参考学习价值,需要的朋友 ...

最新文章

  1. zabbix添加URL监控
  2. Silverlight游戏设计(Game Design):(五)面向对象的思想塑造游戏对象
  3. Oracle9i数据库Data Guard实施及维护手册 1
  4. Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)
  5. 主攻ASP.NET.4.5.1 MVC5.0之重生:Web项目语音朗读网页文本,简单语音提示浏览状态
  6. [转]HTTPS网络流量解密方法探索系列(一)
  7. 机器学习:决策树及ID3,C4.5,CART算法描述
  8. win7+ubuntu19.10使用easybcd安装
  9. 结构与算法(05):二叉树与多叉树
  10. sql server (mssqlserver)无法启动,事件查看器提示SQL Server 无法生成 FRunCM 线程
  11. 随想录(工业软件和消费级软件的区别)
  12. 天梯—跟奥巴马一起画方块(C语言)
  13. 用户'MYCOMPUTER\ASPNET' 登录失败”的解决方法
  14. vim的安装以及配置
  15. 2021深圳杯d题数学建模 基于一个微分对策问题的机器学习能力定量评价
  16. Mac上安装eclipse svn插件subclipse
  17. 一个人的时候,学会坦然。
  18. 鸿蒙os跑分,预装鸿蒙OS 2.0!华为MatePad Pro2跑分曝光:麒麟9000、8GB内存
  19. 学习笔记二:IBIS模型编辑报错纠正
  20. Zynq-7000 AMP运行模式下的软件切换及多版本固化运行

热门文章

  1. 每天一道面试题(JAVA)
  2. 1.Linux常见指令及权限详解
  3. div contenteditable disabled 失效问题
  4. 朝鲜APT组织Group123利用美朝会议消息构造恶意HWP文件针对韩国发起攻击
  5. IVI车载信息娱乐系统的网络安全注意事项
  6. xp停止服务之后该如何让系统免疫Autorun病毒
  7. python opencv数字识别_基于模板匹配的手写数字识别(python+opencv)
  8. 为什么求线性回归最优解中,使用的是梯度下降算法,而非直接求取驻点求导数为0的点?
  9. 【进度总结】软件工程选题报告
  10. PHP封装一个手机号归属地查询接口,Ctrl CV就可以用,返回json数据