概述
虚拟主机指的是在一台主机上运行了多个网站。虚拟主机可以基于ip、基于名称。这些站点运行在统一物理服务器上,同时不会被用户发现。
基于名称的虚拟主机
使用基于名称的虚拟主机时,服务器依靠客户端将主机名报告为HTTP标头的一部分,这样一来,不同的虚拟主机可以共享相同的IP地址。
基于名称的虚拟主机通常很简单,只需要配置DNS服务器将每个主机名映射到正确的ip地址,然后配置apache http server即可识别不同的主机名。基于名称的虚拟主机还可以缓解对稀缺ip地址的需求。
原理
基于名称的虚拟主机解析的第一步是基于ip的解析。基于名称的虚拟主机解析仅在将候选范围缩小到基于ip的最佳匹配之后才选择最合适的基于名称的虚拟主机。在所有VirtualHost指令中对IP地址使用通配符,使基于ip的映射无关紧要。
当请求达到时,服务器将VirtualHost根据请求使用的ip地址和端口找到最佳的配置参数。如果包含该参数的组合的虚拟主机不止一个,apache将进一步将Servername和ServerAlias指令与请求中存在的参数进行比较。
如果任何虚拟主机的配置项中都没有配置ServerName,则服务器将会默认从系统主机名派生的标准域名。
实际应用
基于单IP一个端口不同域名
[root@apache html]# cat /etc/httpd/conf.d/vhosts.conf<VirtualHost *:80>ServerAdmin www.apache1.comDocumentRoot "/var/www/html/apache1"ServerName www.apache1.comServerAlias www.apache1.comErrorLog "logs/apahce1.com-error_log"CustomLog "logs/apache1.com-access_log" common</VirtualHost><VirtualHost *:80>ServerAdmin www.apache2.comDocumentRoot "/var/www/html/apache2"ServerName www.apache2.comServerAlias www.apache2.comErrorLog "logs/apahce2.com-error_log"CustomLog "logs/apache2.com-access_log" common</VirtualHost>cd /var/www/html/lsmkdir apache1 apache2lsecho "<h1>www.apache1.com</h1>" > /var/www/html/apache1/index.htmlecho "<h1>www.apache2.com</h1>" > /var/www/html/apache2/index.html#同样内网环境下配置一台主机的hosts域名解析到apache服务器地址[root@localhost ~]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.25.130 www.apache1.com192.168.25.130 www.apache2.com

基于多ip地址一个端口
#单机下网卡绑定多个ip地址[root@apache html]# ip a add 192.168.25.131 dev ens33[root@apache html]# ip a add 192.168.25.132 dev ens33[root@apache html]# cat /etc/httpd/conf.d/vhosts.conf<VirtualHost 192.168.25.131:80>ServerAdmin www.apache3.comDocumentRoot "/var/www/html/apache3"ServerName www.apache3.comServerAlias www.apache3.comErrorLog "logs/apahce3.com-error_log"CustomLog "logs/apache3.com-access_log" common</VirtualHost><VirtualHost 192.168.25.132:80>ServerAdmin www.apache4.comDocumentRoot "/var/www/html/apache4"ServerName www.apache4.comServerAlias www.apache4.comErrorLog "logs/apahce4.com-error_log"CustomLog "logs/apache4.com-access_log" common</VirtualHost>mkdir apache3 apache4echo "<h1>wwww.apache3.com</h1>" > /var/www/html/apache3/index.htmlecho "<h1>wwww.apache4.com</h1>" > /var/www/html/apache4/index.html
基于单个ip多个socket端口
vim /etc/httpd/conf/httpd.conf#添加端口listen 8080<VirtualHost 192.168.25.132:80>ServerAdmin www.apache4.comDocumentRoot "/var/www/html/apache4"ServerName www.apache4.comServerAlias www.apache4.comErrorLog "logs/apahce4.com-error_log"CustomLog "logs/apache4.com-access_log" common</VirtualHost><VirtualHost 192.168.25.132:8080>ServerAdmin www.apache5.comDocumentRoot "/var/www/html/apache5"ServerName www.apache5.comServerAlias www.apache5.comErrorLog "logs/apahce5.com-error_log"CustomLog "logs/apache5.com-access_log" common</VirtualHost><VirtualHost 192.168.25.132:8080>ServerAdmin www.apache6.comDocumentRoot "/var/www/html/apache6"ServerName www.apache6.comServerAlias www.apache6.comErrorLog "logs/apahce6.com-error_log"CustomLog "logs/apache6.com-access_log" common</VirtualHost>#重启服务systemctl restart httpd

