从我的 Amazon Elastic Load Balancer 重定向到 HTTPS

从我的 Amazon Elastic Load Balancer 重定向到 HTTPS

我在 2 个 EC2 实例上有一个 rails 应用程序,在 Amazon Elastic Load Balancer 后面运行 nginx。我想强制使用 HTTPS,在添加负载均衡器之前,它运行良好。现在我不太清楚该怎么做。

我的负载均衡器有 2 个监听器:80 到 80 和 443 到 80(带有 ssl 证书)。

我尝试将以下重写规则添加到 nginx 配置中,但似乎不起作用:

if ($http_x_forwarded_proto != 'https') {
  rewrite ^(.*) https://$host$1 permanent;
}

任何帮助将不胜感激!

答案1

我们可以通过以下方法解决这个问题:

保持 ELB 配置如下(监听 80 和 443 端口,并将流量转发到 80 端口上的实例)

然后application_controller.rb做类似的事情:

class ApplicationController < ActionController::Base
  force_ssl if: :ssl_required?

  # rest of your code here

  private
  def ssl_required?
    # If we came in through the load-balancer, this header will be present
    if request.headers['X-Forwarded-Proto'].present? && !request.ssl?
      return true
    end
    return false 
  end
end

相关内容