4

我有一个在 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 论坛中发布了帖子和主题,没有任何帮助。

4

3 回答 3

8

我在重定向时遇到了同样的问题(使用相同的 nginx conf 代码,如此处所示)。

然后,我将重定向配置作为最后一个 server{} 块(在我的 domain.com 配置文件的末尾),ELB 能够再次找到实例。

我没有进一步研究它,但似乎 vhost 处理是按顺序完成的,所以当 ELB 访问我的服务器的 IP 地址时,它会落在第一个定义的 server{} 块上,在我的例子中是重定向。Nginx 抛出 301 返回码,ELB 吓坏了,因为它不是 200。

不过只是猜测。

所以,我的配置(真正的虚拟主机在上面,重定向是最后的):

少 /etc/nginx/sites-enabled/domain.com

server {
    listen 80;
    server_name domain.com;
    .....
}

server {
    listen       80;
    server_name  www.domain.com;
    return       301 http://domain.com$request_uri;
}
于 2013-08-26T14:40:26.133 回答
2

我不熟悉 Amazon ELB,但也许我可以在 nginx 部分提供帮助。

对于您的场景,我通常在 nginx 中使用两个服务器块。一个处理重写/重定向(example.com),另一个处理常规站点(www.example.com)。两个块可以在同一个文件中。

# for redirecting only...
server {
    listen 80;
    server_name example.com;

    # re-written to www...
    location / {
       rewrite ^(.*)$ $scheme://www.example.com$1 permanent;
    }
}

# regular web site config here...
server {
    listen 80;
    server_name www.example.com;

    root /home/ubuntu/apps/st/public;
    passenger_enabled on;
    ...
}
于 2013-04-06T16:17:24.960 回答
0

老问题,但因为它出现在搜索中。

现在可以使用 AWS 应用程序负载均衡器重定向到 www(或任何其他主机)。这可能比使用 nginx 配置更方便管理。

https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-update-rules.html

于 2019-04-22T19:32:16.807 回答