HTTP-虚拟主机的配置

​ 虚拟主机指的是在一台服务器配置多个站点的一种方法。由于大多数情况下一个网站的流量并不足以对一个服务器造成压力,也就会造成资源的浪费,于是就产生了在一台服务器搭建多个网站的技术。也就是虚拟主机。实现虚拟主机通常有一下三种方法。

  1. 基于IP地址,即为每个虚拟主机配置一个IP地址。

​ 通常情况下,这种方法不显示,主要是公网IP地址是很稀缺的资源,所以在实际环境中并不会使用此种方法,但这里还是说一下此种方法的配置。

​ 假如我们有两个站点,位置分别在/var/www/site1和/var/www/site2。对应的IP地址为1.1.1.1和2.2.2.2,那么参照如下配置。

<VirtualHost 1.1.1.1:80>
	ServerName www.a.com
	DocumentRoot "/var/www/site1"
	<Directory /var/www/site1>
		Require all gented
	</Directory>
</VirtualHost>
<VirtualHost 2.2.2.2:80>
	ServerName www.b.com
	DocumentRoot "/var/www/site2"
	<Directory /var/www/site2>
		Require all gented
	</Directory>
</VirtualHost>

​ 然后重启服务即可,需要注意的是,关于虚拟主机的配置文件可能已经默认存在,并且存放在单独的文件 中,需要查找相关配置以避免配置冲突。还有,配置文件中ServerName的配置在此种方式中并不生效,可以随便填写。包括下面的基于端口的虚拟主机也是同样。

  1. 基于端口的虚拟主机

    基于端口就是给不同的站点配置不同的端口,但使用同一个IP地址,在实际使用中其实也没有太多价值,主要是DNS解析的时候并不能直接指向端口。所以会造成很多麻烦。这里同样简单演示一下其配置,还是使用上面的信息。端口分别给80和8080.

    listen 80
    listen 8080
    <VirtualHost 1.1.1.1:80>
    	ServerName www.a.com
    	DocumentRoot "/var/www/site1"
    	<Directory /var/www/site1>
    		Require all gented
    	</Directory>
    </VirtualHost>
    <VirtualHost 1.1.1.1:8080>
    	ServerName www.b.com
    	DocumentRoot "/var/www/site2"
    	<Directory /var/www/site2>
    		Require all gented
    	</Directory>
    </VirtualHost>

    以上,配置内容并不会有什么差别,只是IP和端口变了一下。当然访问的时候由于使用了非标准端口,所以需要手动指定具体的端口才能访问。

  2. 基于FQDN的虚拟主机

    和上面的两种方法,此种是真正在生产中使用的方法,使用此种方法需要用到servername选项了,在上面两种方法中虽然有配置,但实际并不起到任何作用。下面的配置方法就必须注意此项了,系统会根据此项来判断到底是访问的哪个站点。配置如下:

<VirtualHost *:80>
	ServerName www.a.com
	DocumentRoot "/var/www/site1"
	<Directory /var/www/site1>
		Require all gented
	</Directory>
</VirtualHost>
<VirtualHost *:80>
	ServerName www.b.com
	DocumentRoot "/var/www/site2"
	<Directory /var/www/site2>
		Require all gented
	</Directory>
</VirtualHost>

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!