浅谈 apache 是通过哪条语句判断虚拟主机

       客户端向服务器发起请求后,服务器上有多个虚拟主机,那么服务器是怎么判断归属哪个主机的呢?下面来试验一下:

做好的dns解析为: www.dz.com   1.1.1.1

apache配置文件为:
<VirtualHost 1.1.1.1:80>
    ServerAdmin venuslinux@gmail.com
    DocumentRoot /wz/dz
    ServerName 1.1.1.1
    ErrorLog logs/dz.com-error_log
    CustomLog logs/dz.com-access_log common
    directoryindex index.php
</virtualhost>

肯定不能访问到dz页,按顺序的话,应该会访问到排序第一的虚拟主机。
当设置为:
<VirtualHost 1.1.1.1:80>
    ServerAdmin venuslinux@gmail.com
    DocumentRoot /wz/dz
    ServerName www.dz.com
    ErrorLog logs/dz.com-error_log
    CustomLog logs/dz.com-access_log common
    directoryindex index.php
</virtualhost>

可以访问dz页面。

当设置为:
<VirtualHost www.dz.com:80>
    ServerAdmin venuslinux@gmail.com
    DocumentRoot /wz/dz
    ServerName 1.1.1.1
    ErrorLog logs/dz.com-error_log
    CustomLog logs/dz.com-access_log common
    directoryindex index.php
</virtualhost>

可以访问到dz页面。

设置为:

<VirtualHost www.dz.com:80>
    ServerAdmin venuslinux@gmail.com
    DocumentRoot /wz/dz
    ServerName www.dz.com
    ErrorLog logs/dz.com-error_log
    CustomLog logs/dz.com-access_log common
    directoryindex index.php
</virtualhost>
可以访问。

那么我们现在可以下结论了,在<virtualhost>语句中填入域名可以访问的到,在servername中填写也可以访问到,一般情况下呢,还是都填写域名的好。

apache 添加多域名支持 (绑定多个域名)

      基于域名的虚拟主机,添加多域名支持只需配置<virtualhost> 这段代码即可

方式如下:

<VirtualHost www.nq.com:80 (这里有个空格)www.rootop.org:80>
    ServerAdmin venuslinux@gmail.com
    DocumentRoot /wz/nq
    ServerName www.nq.com
    ErrorLog logs/nq.com-error_log
    CustomLog logs/nq.com-access_log common
    directoryindex index.php
</virtualhost>

       后面的www.rootop.org:80 就是所添加的域名,这样一来,即可以通过www.nq.com 来访问也可以通过www.rootop.org访问了。

第二种方法:

在<VirtualHost></VirtualHost>字段之间加一行 ServerAlias www.domain.com 即可。

所有要绑定的域名都写在serveralias 后面

参考链接:https://www.rootop.org/ApacheManual/Apache2.2_zh_CN/vhosts/name-based.html

httpd: apr_sockaddr_info_get() failed for s1

[root@s1 conf]# service httpd restart
停止 httpd:                                               [确定]
启动 httpd:httpd: apr_sockaddr_info_get() failed for s1
httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName
                                                                      [确定]

第一句没看懂啥意思,第二句就是无法确定完全合格域名,用127.0.0.1代替。那八成上面那句错误跟第二句有关系了,在httpd.conf全局配置中加一句code:

servername s1   //我主机名为是s1

或者是将httpd.conf中的ServerName 前面的 # 去掉 根据上面的notes自己修改。

restart server OK。