使用Opsworks标准设置/配方为通过Unicorn / nginx层提供的Rails应用程序。 SSL在Elastic Load Balancer处终止 - 因此来自ELB的rails应用程序的流量始终为http。到现在为止还挺好。我希望将http://domain.com的任何请求重定向到https://domain.com
ELB有两个侦听器 - 一个是端口80,另一个是443。
我知道如果我运行自己的nginx,我可以设置一个重定向规则......但是,如果可能的话,我希望保持在opsworks的做事方式。
答案 0 :(得分:2)
我非常确定您必须在应用服务器上使用nginx来处理重定向http - > HTTPS。 以下是解决此问题的两种方法。
将所有请求从80重定向到https
:
server {
listen 80;
return 301 https://example.com/$request_uri;
}
ELB支持名为X-FORWARDED-PROTO的标头。 通过ELB的所有HTTPS请求都将具有X-FORWARDED-PROTO =“HTTPS”的值:
server {
listen 80;
location / {
if ($http_x_forwarded_proto != 'https') {
rewrite ^ https://$host$request_uri? permanent;
}
}
}
答案 1 :(得分:2)
我认为在OpsWorks中执行此操作的唯一方法是创建一个修改/etc/nginx/sites-available/#{application}
的自定义配方。在您的自定义食谱中:
somecookbook /食谱/ nginx.rb
node[:deploy].each do |application, deploy|
service "nginx" do
supports :status => true
action :nothing
end
# Add HTTP => HTTPS redirect
template "/tmp/http_redirect.conf" do
source "nginx/http_redirect.conf.erb"
end
execute "redirect HTTP to HTTPS" do
cwd "/etc/nginx/sites-available"
command "cat #{application} /tmp/http_redirect.conf > /tmp/#{application}.conf && cat /tmp/#{application}.conf > #{application}"
notifies :restart, "service[nginx]", :immediately
end
end
end
然后在配置中:
somecookbook /模板/默认/ nginx的/ http_redirect.conf.erb
server {
listen 80;
rewrite ^(.*) https://$host$1 permanent;
}