【问题标题】:Redirect https from non www to www将 https 从非 www 重定向到 www
【发布时间】:2016-02-24 16:19:32
【问题描述】:

以下是我的 Nginx 服务器配置(不工作)。我需要将 https 非 www 重定向到 www。所以当我访问一个站点https://example.com时,它应该将我重定向到https://www.example.com

server {
    listen 443 ssl
    server_name example.com;
    return 301 https://www.example.com$request_uri;
}

编辑: 我的负载均衡器:

我在 AWS 中使用运行 Ruby on Rails 应用程序的 AMI Linux。谢谢!!

【问题讨论】:

  • 您的 SSL 证书是安装在 Elastic Load Balancer 还是 Nginx 服务器上?

标签: ruby-on-rails ruby amazon-web-services nginx


【解决方案1】:

请在您的 nginx.conf 文件中使用以下配置。它对我来说工作正常。

server {
       listen         80;
       server_name    www.example.com example.com;

       location / {
            index       index.html;
            root        /usr/share/nginx/html;  #the location of your app folder
       }


        if ($http_x_forwarded_proto = 'http') {
            return 301 https://www.example.com$request_uri;
        }

}

【讨论】:

  • 在 aws 中,您可以使用弹性负载均衡器进行 ssl 重定向。我在我的 nginx 服务器中发现了同样的问题。我在负载均衡器中使用了 ssl,而不是使用后端服务器。后端服务器只监听 80 端口而不是 443。
  • 是的,我已经设置了负载均衡器,但问题是我需要将https://travelog.com 重定向到https://www.travelog.com
  • @d3bug3r .. 那么为什么要监听 443 端口。在负载均衡器中,您应该监听实例的 80 端口以获取 https 。然后,您可以通过在 nginx 服务器中侦听 80 端口而不是 443 来配置重定向...通过使用所有这些程序,我已经修复了从非 www 到 www 的重定向问题
  • 检查编辑,这是我的负载均衡器配置。这个配置有效吗?
  • 那么您上面的配置对我的负载均衡器的配置仍然有效吗?
【解决方案2】:

如果您只想重定向 GET 请求并为非 GET 请求抛出 405(不允许的方法):

server {
  listen 443 ssl;
  server_name example.com;
  if ($request_method = GET) {
    return 301 https://www.example.com$request_uri;
  }
  return 405;
}

server {
  listen 443 ssl;
  server_name www.example.com;

  # locations
}

如果您希望所有请求(GET、POST、...)都被重定向,这是不可能的,我建议您应该尝试 Akshath 的方法。

【讨论】: