【问题标题】:Redirecting http to https using nginx behind AWS load balancer使用 AWS 负载均衡器后面的 nginx 将 http 重定向到 https
【发布时间】:2019-02-07 20:05:56
【问题描述】:

我从高到低搜索过,我觉得这是我项目的最后一道障碍。我正在尝试将所有 http 流量重定向到 https。

目前在输入 domain.info 时,它会重定向到 https://domain.info:80 并返回 ERR_SSL_PROTOCOL_ERROR

但是用 443 替换 80 给我的网页就好了。

我的服务器也在负载平衡器后面,我的证书在 LB 中,而我的服务器中没有。我使用 NGINX 作为我的网络服务器。基本上这是我的设置:

用户>https>负载均衡器>http>服务器

提前非常感谢!

【问题讨论】:

    标签: amazon-web-services http nginx https network-protocols


    【解决方案1】:
    1. 首先,捕获所有 HTTP 传入:
    server {
       listen 80 default_server;
       server_name _;
       return ....;
    }
    
    1. 然后永久重定向到 HTTPS
    server {
       listen 80 default_server;
       server_name _;
       return 301 https://$host$request_uri;
    }
    

    或者...

    server {
        listen 443 ssl default_server;
        server_name foo.com;
    }
    
    server {
        listen 443 ssl default_server;
        server_name foo.com;
    }
    

    【讨论】:

    【解决方案2】:

    直接在负载均衡器中,你可以添加一个重定向规则,你尝试过吗?

    在负载均衡器监听器中,更新 HTTP:80 的默认规则并像这样配置它:

    HTTP 80: default action
    IF
    Requests otherwise not routed
    THEN
    Redirect to https://#{host}:443/#{path}?#{query}
    Status code:HTTP_301
    

    【讨论】:

    • 是的,我已经设置好了。它给出了一个无限的重定向循环,即“重定向太多”
    • 可能是因为你的 nginx 配置中也有重定向规则,只需在 nginx 中删除此重定向规则即可解决此问题。
    • HTTP 301 有缺陷,如果我想要 HTTP 307/308 重定向怎么办?
    • 不知道你说的301有缺陷是什么意思。我多年来一直使用它,没有任何问题。如果它不起作用,它可能来自其他地方。否则,在 aws 负载均衡器侦听器中,您可以在 301 或 302 状态代码之间进行选择,不要看起来像他们在这里处理 307 和 308 状态代码。所以如果你需要这些状态码,这个解决方案可能不适合你。
    猜你喜欢
    • 2015-03-18
    • 2023-04-01
    • 2017-02-19
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 2012-03-24
    • 2018-02-06
    相关资源
    最近更新 更多