我们最近从基于名称的托管转向了单独的 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”中。