我在运行 lamp stack 的 ubuntu 上运行一个 ec2 实例。我配置了我的 httpd.conf 文件以支持通配符子域,但它不起作用。
我的 httpd.conf 文件
NameVirtualHost *
<VirtualHost *>
DocumentRoot /www/example
ServerName example.com
ServerAlias *.example.com
</VirtualHost>
我尝试了所有可能的解决方案,但都没有奏效。最后,我使用 amazon Route-53 设置通配符 DNS,将所有 *.example.com 重定向到 example.com。我的问题是,
- 如果我使用 Route-53 而不是 httpd.conf 文件作为通配符子域可以吗?
- 我的 httpd.conf 文件中有错误吗?(笔记:我与另一家托管服务提供商使用了相同的 httpd.conf 设置,并且它在那里运行良好。)
附加信息 :
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server example.com (/etc/apache2/httpd.conf:1)
port 80 namevhost example.com (/etc/apache2/httpd.conf:1)
port 80 namevhost ip-xx-xxx-xx-xxx.ec2.internal (/etc/apache2/sites-enabled/000-default:1)
Syntax OK
答案1
没有“代替”——要使通配符域名发挥作用,您需要两者。
- 名称解析需要将客户端发送到提供内容的正确主机
- 您的网络服务器必须回答针对其所接收域的请求。
由于您现在已经有了通配符 DNS,并且您的 Apache 服务器应该使用该虚拟主机响应所有请求(是的,它是正确的),那么它应该可以正常运行。
首先,验证您的客户端系统是否解析了正确的名称;ping 通配符中的地址。添加通配符条目后,此操作不会立即起作用,因为 DNS(包括否定响应)被大量缓存。
如果访问了正确的服务器,则应验证是否使用了正确的虚拟主机来处理请求。您可能有其他虚拟主机正在接收请求 - 您能为我们提供输出吗apache2ctl -S
?