【问题标题】:Access X-Forwarded-Proto in lighttpd Configiuration在 lighttpd 配置中访问 X-Forwarded-Proto
【发布时间】:2015-04-09 11:44:43
【问题描述】:

我在 AWS 负载均衡器后面有一个 lighttpd 服务器。 ELB 为我处理所有 SSL 内容,并在端口 80 上通过 HTTP 将请求转发到 lighttpd,同时设置 X-Forwarded-Proto 标头。

由于我只想让一个特定的页面通过 HTTPS 和其他一切通过 HTTP,我想在 lighttpd 配置文件中设置重定向,例如:

$HTTP["scheme"] == "https" {
    $HTTP["host"] !~ ".*ttc/(index.html)?$" {
        $HTTP["host"] =~ "(.*)" {
            url.redirect = ( "^(.*)$" => "http://%1$1")
        }
    }
}

这当然行不通,因为 lighttpd 只能看到 HTTP 请求……

我查看了 mod_extforward,但这似乎只提供对 X-Forwarded-For 标头的访问。

我将不胜感激有关如何解决此问题的任何建议,而无需离开 lighttpd。

【问题讨论】:

    标签: ssl amazon-web-services https load-balancing lighttpd


    【解决方案1】:

    我找不到这个问题的答案,所以我使用如下端口配置破解了:

    HTTPS 443 (elb) => 80 (instance)
    HTTP  80  (elb) => 81 (instance)
    

    在 Lighttpd 配置中:

    $SERVER["socket"] == ":81" {
        # capture vhost name with regex conditiona -> %0 in redirect pattern
        # must be the most inner block to the redirect rule
        $HTTP["host"] =~ ".*" {
            url.redirect = (".*" => "https://%0$0")
        }
    }
    

    所以基本上当 Lighttpd 检测到连接到 81 时,它只是将其重定向到 https。

    【讨论】:

    • 这没有回答问题,因为我不希望所有请求都转到 HTTPS。我唯一要加密的是对我拥有的登录页面的请求——其余的可以安全地使用纯 HTTP。
    • 是的,可能将其添加到错误的问题中。无论如何,也许您可​​以在您的解决方案中使用我的解决方案。没有直接的方法可以如你所愿。
    【解决方案2】:

    您使用的是什么版本的 lighttpd?我正在查看 1.4.36,发现 mod_extforward.c 确实处理 X-Forwarded-Proto。

    如果这仍然不适合您使用 lighttpd 1.4.36,也许 mod_extforward 需要在您的 lighttpd.conf 中的其他模块之前加载?

    【讨论】:

    • 我很确定在我发布问题时我们有一个早期版本的 lighttpd。但是,我现在换了一份新工作,所以我无法检查。
    猜你喜欢
    • 2014-06-14
    • 2019-07-19
    • 1970-01-01
    • 2014-12-07
    • 2017-01-28
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多