将 htaccess 与 Elastic Load Balancer 和 Route 53 结合使用

将 htaccess 与 Elastic Load Balancer 和 Route 53 结合使用

我已将我的 DNS 转移到 Route 53,目前使用别名记录将我的 www.domain.com 和 domain.com 指向我的弹性负载均衡器。

两种方法都很好用,但我的问题是,当我尝试使用 htaccess 文件将非 www 重定向到 www 时。当我访问 domain.com 并重新路由到 www.domain.com 时,DNS 查找失败并出错,但直接访问 www.domain.com 仍然有效。

在我使用负载均衡器完成所有操作之前以及在测试实例时,我会转到我的域“ec2-99-99-999-99.compute-1.amazonaws.com”的公共 DNS,例如,每当我放入 htaccess 文件时,它就会跳转到“www.ec2-99-99-999-99.compute-1.amazonaws.com”并产生错误。

我为此苦恼不已,如能得到任何帮助我将非常感激。

答案1

如果看不到你的 .htaccess 文件,就无法完全清楚发生了什么,但是如果你启用了 mod_rewrite,则类似这样的操作应该可以工作:

RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^/?(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

编辑:

如果您看到来自 ELB 的 502 错误,则可能是因为您的应用程序未返回完整的响应标头,而仅返回 HTTP 响应代码。EC2 开发论坛上对此进行了讨论: https://forums.aws.amazon.com/message.jspa?messageID=345128

您可以通过监控服务器上的网络流量来确定哪些标头和响应代码被发送回 ELB 来排除此故障。当它失败(在移动设备上)并成功(在您的 PC 上)时,您可能应该这样做。

假设你的服务器运行的是 Linux,ngrep是一个很好的简单工具:

# Just show HTTP traffic
ngrep -q '' port 80

# Just show GET and POST requests
ngrep -t '^(GET|POST) 'port 80'

否则,您可以使用在 Windows 下运行良好的 Wireshark。

相关内容