apache2配置VirtualHost 实现不同域名对应不同的网页

假设你有两个域名:

test1.com
test2.com

为了让两个域名映射到VPS上的不同的网页,可以做如下设置:

1、将这些域名全部映射到你的VPS的IP地址

2、安装apache2:

apt-get install apache2

安装完毕后apache2已经启动,可以通过浏览器访问上面所有的域名,发现访问到的都是apache2的默认网页,这个默认网页实际上存储于/var/www/html/index.html

3、建立多个网页,比如在/var/www下建立:

/var/www/test1/index.html
/var/www/test2/index.html

4、配置VirualHost

nano /etc/apache2/sites-available/000-default.conf

这是apache2的默认配置,删除注释,可以看到:

<VirtualHost *:80>
  ServerName www.example.com
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

显然,现在只有一个VirualHost,它使用端口号80,对应网页的目录是/var/www/html,因此以任何域名访问均访问到的都是/var/www/html。修改该文件:

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName test1.com
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/test1
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:80>
  ServerName test2.com
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/test2
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

注意第一句NameVirtualHost *:80不能省略,这是允许80号端口通过Host字段来区分应答不同的HTTP请求。

5、重启apache2:

service apache2 restart

此时访问test1.com得到的是/var/www/test1/index.html,访问test2.com得到的是/var/www/test2/index.html

 

有人可能会问,既然已经设置了test1.com和test2.com都映射到同一IP,访问前进行DNS查询,那么访问时用的都是这个ip,服务器如何知道你用哪个域名访问的呢?实际上这种方法的原理是:浏览器发送HTTP请求中存在一个Host字段,Host字段即你是用哪个域名去访问的,若用test1.com访问,则Host字段是test1.com,若用test2.com访问,则Host字段是test2.com,服务器收到HTTP请求时,解析出Host字段,就知道该用哪个网页去响应了。