我在 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