我几十个小时都坚持这件事.我无法让它发挥作用.我尝试了一切我能想到和/或在网上找到的东西.
所以,我的应用程序指向ELB(web).ELB侦听80和443并将流量发送到80(此处SSL终止)到成员实例(即nginx).
Nginx代理应用程序请求在多个实例前面的另一个ELB(app).这些实例运行puma.
一切正常,除非我尝试使用方案访问URL(我用于force_ssl该控制器)https,我得到一个重定向循环.
这是我的nginx配置看起来像
location @{{app_name}} {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_pass http://{{app_name}};
# limit_req zone=one;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
Run Code Online (Sandbox Code Playgroud)
(显然app_name被ansible取代.)
而不是$scheme,我尝试了硬编码https,$proxy_add_x_forwarded_proto但没有一个对我有效.我仍然得到循环.
然后我开始检查envrails中的内容,无论我在nginx配置中设置哪个头,我都会看到以下值.
"SERVER_PROTOCOL"=>"HTTP/1.1",
"HTTP_X_FORWARDED_PROTO"=>"http",
"rack.url_scheme"=>"http",
Run Code Online (Sandbox Code Playgroud)
我不确定我做错了什么.任何帮助赞赏!注意:我已经检查了所有找到的SO线程,没有人帮忙!