阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux虚拟主机配置

129次阅读
没有评论

共计 11919 个字符,预计需要花费 30 分钟才能阅读完成。

一、概述
虚拟主机(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/test01
  ServerName www.test01.com
  <Directory /var/www/html/test01>
      Options Indexes FollowSymLinks
      AllowOverride All
      Order Allow,Deny
      Allow 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/test02
  ServerName www.test02.com
  <Directory /var/www/html/test02>
      Options Indexes FollowSymLinks
      AllowOverride All
      Order Allow,Deny
      Allow 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 服务器配置三个网络,如下图所示:

Linux 虚拟主机配置

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

Linux 虚拟主机配置

访问 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/test01
  ServerName www.test01.com
  <Directory /var/www/html/test01>
      Options Indexes FollowSymLinks
      AllowOverride All
      Order Allow,Deny
      Allow from all
  </Directory>
</VirtualHost>
[root@Slaver conf.d]#

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

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-02/112871p2.htm

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/test01
  ServerName www.test01.com
  <Directory /var/www/html/test01>
      Options Indexes FollowSymLinks
      AllowOverride All
      Order Allow,Deny
      Allow from all
  </Directory>
</VirtualHost>

<VirtualHost 192.168.17.128:8080>
  DocumentRoot /var/www/html/test02
  ServerName www.test01.com
  <Directory /var/www/html/test02>
      Options Indexes FollowSymLinks
      AllowOverride All
      Order Allow,Deny
      Allow 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/test01
  ServerName www.test01.com
  ErrorLog /var/log/httpd/www.test01.err
  CustomLog /var/log/httpd/www.test01.access common
  <Directory /var/www/html/test01/administrator>
      Options Indexes FollowSymLinks
      AllowOverride All
      Order Allow,Deny
      Allow from 192.168.17.0/24
  </Directory>
</VirtualHost>
[root@Slaver conf.d]#

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

Linux 虚拟主机配置

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

配置文件如下:

[root@Slaver conf.d]# cat www.test01.conf
<VirtualHost 192.168.17.128:80>
  DocumentRoot /var/www/html/test01
  ServerName www.test01.com
  ErrorLog /var/log/httpd/www.test01.err
  CustomLog /var/log/httpd/www.test01.access common
  <Directory /var/www/html/test01/administrator>
      Options Indexes FollowSymLinks
      AllowOverride AuthConfig
      AuthName “Please input username and password!”
      AuthType Basic
      AuthUserFile /etc/httpd/.htpasswd
      Require user houqd2012 houqd2015
      Order Allow,Deny
      Allow 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 文件。

效果图如下:

Linux 虚拟主机配置

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

四、参考链接
a. VirtualHost Examples:http://httpd.apache.org/docs/2.4/vhosts/examples.html

b. Ubuntu Apache 2 配置详解(含虚拟主机配置方法)  http://www.linuxidc.com/Linux/2011-07/38324.htm

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

d. Linux 入门教程:Apache 服务配置  http://www.linuxidc.com/Linux/2014-07/104454.htm

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

一、概述
虚拟主机(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/test01
  ServerName www.test01.com
  <Directory /var/www/html/test01>
      Options Indexes FollowSymLinks
      AllowOverride All
      Order Allow,Deny
      Allow 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/test02
  ServerName www.test02.com
  <Directory /var/www/html/test02>
      Options Indexes FollowSymLinks
      AllowOverride All
      Order Allow,Deny
      Allow 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 服务器配置三个网络,如下图所示:

Linux 虚拟主机配置

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

Linux 虚拟主机配置

访问 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/test01
  ServerName www.test01.com
  <Directory /var/www/html/test01>
      Options Indexes FollowSymLinks
      AllowOverride All
      Order Allow,Deny
      Allow from all
  </Directory>
</VirtualHost>
[root@Slaver conf.d]#

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

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-02/112871p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计11919字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中