【问题标题】:nginx redirect all https requests to local https portalnginx 将所有 https 请求重定向到本地 https 门户
【发布时间】:2016-05-21 06:00:28
【问题描述】:

我有本地门户(强制门户),它是 https 并将所有 http 请求重定向到本地 https 工作正常。 但是将请求从 https 重定向到本地 https 门户根本不起作用。 这里我是如何配置 nginx 的:

upstream flask_portal {
    server unix:/tmp/flask_portal.sock;
}

server {
    listen 172.31.3.1:443 default_server;
    rewrite ^(.*) https://my_site.com?url=$server_name$1;
}

server {
    listen 172.31.3.1:80 default_server;
    listen 172.31.3.1:443 ssl;
    server_name my_site.com;
    ssl_certificate      my_site.com.cert;
    ssl_certificate_key  my_site.com.key;

    location / {
        uwsgi_pass flask_portal;
        include uwsgi_params;
    }
}

当我用 curl 测试它到https://www.google.com 它报告:

curl: (35) Unknown SSL protocol error in connection to www.googlw.com:443

我认为 nginx 应该将 www.google com 重定向到 my_site.com 并且 curl 应该询问 my_site 证书,但它没有。

【问题讨论】:

    标签: redirect nginx https rewrite http-status-code-302


    【解决方案1】:

    不能重定向 https,因为您的证书与 www.google.com 或 *.google.com 不匹配,因此浏览器(正确地)将无法与其握手。 Curl(和您的浏览器)甚至永远不会看到重定向,因为这需要成功的握手。

    可以做的是告诉浏览器你是一个强制门户https://www.chromium.org/chromium-os/chromiumos-design-docs/network-portal-detection

    【讨论】:

    • 移动设备可以很好地检测强制门户,某些操作系统(例如 Elementary OS)也是如此,chrome 浏览器也可以。他们工作得很好。但是有些浏览器并没有检测到强制门户(以Firefox为例),因此如果有人使用这种浏览器,他会得到SSL错误页面而不是门户页面。所以用户可能不明白,要上网,他需要打开任何 HTTP 链接,而只会关闭 Web 浏览器。我没有成功找到这个问题的任何解决方案。 @jdewald,谢谢你的回答。我会发现浪费我来解决它。
    • 如果 Firefox 没有检测到强制门户(wiki.mozilla.org/Necko/CaptivePortal),您无法解决 https 网页的问题:FF 认为您在网络中,而不是您要求答案的服务器,因此,这是一次攻击,会显示一条红色消息。
    猜你喜欢
    • 2018-09-15
    • 2013-04-06
    • 2016-10-23
    • 2018-02-22
    • 2017-05-05
    • 2013-11-26
    • 2014-06-30
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多