主要宿主消失

主要宿主消失

我有一个位于 /var/www/html/ 的网站,运行正常。

我现在尝试通过在 httpd.conf 中添加以下条目来设置“blog.example.com”

Setup1

<VirtualHost *:80>
DocumentRoot /var/www/html/blog
ServerName blog.example.com

</VirtualHost>

但现在主站点停止工作,无法访问任何内容:http://blog.example.com任何一个

root@server [~]# apachectl configtest
Syntax OK

我尝试了以下方法,但也没有用

Setup2

NameVirtualHost *:80

<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot /var/www/html/blog

</VirtualHost>

(这与https://serverfault.com/questions/209945/setting-up-blog-at-blog-example-com-httpd-conf-issue

该网站在 RedHat/CentOS 系统上以用户“apache”身份运行。

我也尝试了以下方法,但没有成功

Setup3

NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName www.example.com
</VirtualHost>

<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot /var/www/html/blog
</VirtualHost>

这样更好,因为我能够访问该网站,但 blog.example.com 链接仍然无法使用。


设置5

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/html
</VirtualHost>

<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot /var/www/html/blog
<Directory /var/www/html/blog/>
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all
</Directory>
</VirtualHost>

设置6

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/html
</VirtualHost>

<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot /var/www/html-blog
</VirtualHost>

在这两种情况下,nslookup 均显示以下内容:

root@server [/etc/httpd/conf]# nslookup
> example.com
Server:         67.99.9.90
Address:        67.99.9.90#53

Non-authoritative answer:
Name:   example.com
Address: 174.999.99.99
> blog.example.com
Server:         67.99.9.90
Address:        67.99.9.90#53

** server can't find blog.example.com: NXDOMAIN

答案1

你应该查看 Apache 文档基于名称的虚拟主机支持因此你可能会读到以下内容:

主要宿主消失

如果您要将虚拟主机添加到现有 Web 服务器,还必须为现有主机创建一个块。此虚拟主机中包含的 ServerName 和 DocumentRoot 应与全局 ServerName 和 DocumentRoot 相同。在配置文件中首先列出此虚拟主机,以便它充当默认主机。

编辑:

因此,主站点再次上线,我们应该假设 Apache 端一切正常。看来我们没有处理与 HTTP/1.1 VHosts(基于名称的虚拟主机)有关的问题,因为主站点和博客使用相同的功能。

现在让我们看看为什么 blog.example.com 不起作用。您应该检查 blog.example.com 的 DNS 记录,因为它应该指向与 example.com 相同的地址

$ nslookup
> example.com
[...]
> blog.example.com
[...]
> quit

编辑2

关于nslookup未返回子域结果的问题,已解释。对 blog.example.com 的请求永远不会到达您的 apache 网络服务器,因为 DNS 服务器不知道如何处理blog.example.com

因此,就我们所看到和知道的而言,您的 Apache 配置似乎是正确的。在我们添加 VirtualHost 后,主页再次上线。所以我相信您blog.也做对了。

接下来的内容取决于域的 DNS 提供商。最简单的方法是将通配符子域放在 example.com 上以重定向到您的 Web 服务器。这会将任何请求重定向ANYTHING.example.com到您的 Web 服务器,该服务器使用您在 apache 中配置的 VirtualHosts 处理其余内容。

请记住,DNS服务器需要一些时间才能更新其缓存。因此这些更改可能需要一些时间。

答案2

第一个问题是你如何定义“无功能”?你是否收到来自服务器的错误?(错误是什么?)

您看到的是主页而不是博客页面吗?(命名虚拟主机配置可能有问题)

您根本就无法连接吗?(DNS 问题?Apache 日志中出现任何内容了吗?)

一些想法...A)您可以尝试为博客子树明确添加目录指令,看看是否会产生影响。

<Directory /var/www/html/blog/>
        AllowOverride None
        Order allow,deny
        Allow from all
</Directory>

A) 如果您将博客树移到其目录结构中,比如 /var/www/html-blog,并更新您的 httpd.conf 以反映它,会发生什么情况......

<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot /var/www/html-blog
<Directory /var/www/html-blog/>
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all
</Directory>
</VirtualHost>

答案3

在主 http 配置中,是否有以下行:

名称虚拟主机 *

取消注释?否则虚拟主机将无法工作。

相关内容