我有一个位于 /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 配置中,是否有以下行:
名称虚拟主机 *
取消注释?否则虚拟主机将无法工作。