2015-02-09 75 views
2

我在AWS负载均衡器后面有一个lighttpd服务器。 ELB为我处理所有SSL资料,并通过端口80将请求转发到HTTP上的lighttpd,并一路设置X-Forwarded-Proto头。在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。

回答

0

我无法找到答案,这让我一直在使用的端口配置遭到黑客攻击如下:

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。

+0

这并没有回答这个问题,因为我不希望所有请求转到HTTPS。我唯一需要加密的是请求登录页面 - 其余部分可以安全地使用纯HTTP。 – 2015-04-25 12:30:26

+0

是的可能是将它添加到错误的问题。无论如何,也许你可以利用我的解决方案在你的解决方案。没有直接的办法可以像你想的那样去做。 – ooxio 2015-04-25 13:29:13

0

你使用的是什么版本的lighttpd?我在看1.4.36,看到mod_extforward.c确实处理了X-Forwarded-Proto。

如果这对lighttpd 1.4.36仍然不起作用,那么在您的lighttpd.conf中的某些其他模块之前,可能需要先加载mod_extforward?

+0

我很确定当我发布问题时,我们有一个较早版本的lighttpd。但是,现在我已经转到了一份新工作,所以我无法检查。 – 2015-08-19 09:05:11