使用 AWS 强制 SSL 重定向,在 ELB 上解密 SSL 并路由到 Nginx/Passenger

使用 AWS 强制 SSL 重定向,在 ELB 上解密 SSL 并路由到 Nginx/Passenger

目前,我们正在创建一个新环境,并且在使用 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文档提到,有些标题没有传递,因此需要此指令。

希望这可以帮助!

相关内容