我有一个在 example.com 上运行的应用程序,现在我想将所有流量重定向到 www.example.com,因为我们正在与 Akamai 的 CDN 合作开发您的网站。我的域停在 Route53 中,添加了 Elastic Load Balancer 的 CNAME 的 CNAME 指向 *.example.com,我正在使用以下配置运行 nginx Web 服务器。如果我使用此配置,ELB 会抛出实例,现在 domain.com 工作正常,www.domain.com 正常,但没有发生重定向。
server {
listen 80;
server_name example.com;
# rewrite ^ http://www.example.com$request_uri? permanent;
root /home/ubuntu/apps/st/public;
passenger_enabled on;
}
但我无法实现重定向。
还尝试添加值为负载均衡器 cname 的 PTR。
尝试更改 nginx 配置,如您所见
rewrite ^ http://www.example.com$request_uri? permanent
;即使那是行不通的。
一旦我添加了上面的行,应用程序实例就会消失,ELB 会从堆栈中抛出。
有什么解决方法,我从3-4天开始就一直在努力实现这一目标,现在它变成了夜马,请帮助我。我还在 aws 论坛中发布了帖子和主题,但没有任何帮助。
最佳答案
我在重定向方面遇到了同样的问题(使用相同的 nginx conf 代码,如下所示)。
然后,我将我的重定向配置作为最后一个 server{} 块(在我的 domain.com 配置文件的末尾),并且 ELB 能够再次找到实例。
我没有深入研究它,但似乎 vhost 处理是按顺序完成的,所以当 ELB 命中我服务器的 IP 地址时,它落在第一个定义的 server{} 块上,在我的情况下是重定向。 Nginx 抛出 301 返回码,ELB 吓坏了,因为它不是 200。
不过只是猜测。
所以,我的配置(真正的虚拟主机在上面,重定向在最后):
server {
listen 80;
server_name domain.com;
.....
}
server {
listen 80;
server_name www.domain.com;
return 301 http://domain.com$request_uri;
}