VirtualHost 无法根据域名正确定向

VirtualHost 无法根据域名正确定向

我们最近从基于名称的托管转向了单独的 IP,以实现 SSL。因此,每个网站现在都有自己的 IP。虽然 www.domain1.com 和 www.domain2.com 被定向到服务器上的正确目录,但 dev.domain1.com 和 dev.domain2.com 等子域却没有。子域也有自己的 IP。以下是其中一个子域的 .conf 文件的结构:

<VirtualHost 1.2.3.4:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/domain1-dev
    ServerName dev.domain1.com
    ServerAlias dev.domain2.com
    ErrorLog logs/dev.domain1.com-error.log
    CustomLog logs/dev.domain1.com-access.log common

    <Directory /var/www/domain1-dev>
      Options Indexes FollowSymLinks
      AllowOverride All
      Order allow,deny
      Allow from all
    </Directory>
</VirtualHost>

ServerName 当前已被注释掉,主 httpd.conf 文件中的 UseCanonicalName 已设置为 off。DocumentRoot 已在此 httpd.conf 文件中设置为 domain1 的路径,指令也是如此。NameVirtualHost 已被注释掉,因为我们现在使用的是基于 IP 的托管。

知道哪里出了问题吗?:-( 这几乎就像没有读取子域名 .conf 文件,或者使用主域名的设置。事实上,我输入的任何子域名都会显示主域名的网站,即使它没有在 .conf 文件下定义。

非常感谢。

编辑

这是我运行 /usr/sbin/httpd -S 时得到的结果:

# /usr/sbin/httpd -S
httpd: apr_sockaddr_info_get() failed for the.servername.com
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
VirtualHost configuration:
1.2.3.5:80        www.domain2.com (/etc/httpd/conf.d/domain2.conf:10)
1.2.3.5:443       www.domain2.com (/etc/httpd/conf.d/ssl.conf:87)
1.2.3.3:80        www.domain1.com (/etc/httpd/conf.d/domain1.conf:1)
1.2.3.3:443       www.domain1.com (/etc/httpd/conf.d/ssl.conf:45)
1.2.3.6:80        dev.domain1.com (/etc/httpd/conf.d/domain1-dev.conf:1)
Syntax OK

编辑

以下是每个域的语法:

<VirtualHost 1.2.3.3:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/html
    ServerName www.domain1.com
    ServerAlias domain1.com
    ErrorLog logs/www.domain1.com-error.log
    CustomLog logs/www..domain1.com-access.log common
</VirtualHost>

答案1

我在这里没有看到 VirtualHost 配置有任何问题,但即使这样,apache 也可能会选择错误的配置,只是为了给你一些见解来帮助解决你的问题

  • apache 总是按以下顺序读取 VirtualHosts
  • 它会根据你的需要选择最适合你的那个
  • 如果你有任何 ServerAlias *.domain ,那么在此之后分配给你的域的任何内容都将失效,请始终将 glob 别名放在末尾

希望这对你有点帮助!

答案2

跑步

$PATH_TO_APACHE_DIR/bin/httpd -t -D DUMP_VHOSTS
or 
$PATH_TO_APACHE_DIR/bin/httpd -S

查看哪些 VirtualHosts 被识别以及哪些文件可能有帮助。运行“httpd -h”以查看显示设置的其他选项列表。

答案3

对于多个 IP 地址上的基于工作名称的主机,请使用

NameVirtualHost IP:80

在您的输出 httpd -S no“NameVirtualHosts”中。

相关内容