![使用 AWS 强制 SSL 重定向,在 ELB 上解密 SSL 并路由到 Nginx/Passenger](https://linux22.com/image/677080/%E4%BD%BF%E7%94%A8%20AWS%20%E5%BC%BA%E5%88%B6%20SSL%20%E9%87%8D%E5%AE%9A%E5%90%91%EF%BC%8C%E5%9C%A8%20ELB%20%E4%B8%8A%E8%A7%A3%E5%AF%86%20SSL%20%E5%B9%B6%E8%B7%AF%E7%94%B1%E5%88%B0%20Nginx%2FPassenger.png)
目前,我们正在创建一个新环境,并且在使用 SSL 时遇到了一些问题。我们正在使用接受 80/443 的 ELB。两者都路由到 Nginx 框上的同一端口(ELB 解密)。在 Nginx 框上,我们正在检查 AWS 标头,如果没有看到它,我们会重定向回 https。但到目前为止,重定向不起作用。
下面是我们针对监听端口 3000 的站点的 nginx 配置文件的副本(ELB 80->3000。ELB 443->3000)。
server {
listen 80;
root /home/app/web-app/public;
passenger_enabled on;
passenger_user app;
# If this is a Ruby app, specify a Ruby version:
passenger_ruby /usr/bin/ruby2.2;
passenger_min_instances 2;
if ($http_x_forwarded_proto != "https") {
return 301 https://$host$request_uri;
}
}
对我在这里做错的事情有什么想法吗?
编辑 -
我们正在使用如下所示的 Passenger docker 镜像 -https://github.com/phusion/passenger-docker
Passenger 启动后似乎接收了端口 3000 上的所有请求,尽管 Nginx 配置显示监听 80。
答案1
@TJSaunders 让我走上了正确的道路。我通过绕过 Nginx 的 bundle exec 单独运行了 Passenger。当我意识到这个错误并转移了我的 docker 文件以启动 Nginx 时,它开始访问配置文件。
答案2
你可能需要告诉乘客传递这些标题,例如:
passenger_pass_header X-Forwarded-For;
passenger_pass_header X-Forwarded-Proto;
这passenger_pass_header
文档提到,有些标题没有传递,因此需要此指令。
希望这可以帮助!