HTTPS标头重定向不使用PHP

时间:2010-09-20 17:59:38

标签: php redirect https

我有一个负载均衡的开发站点,我正在解决SSL上的错误,我遇到了最后一个非常烦人的问题。在某些页面上我需要强制它到SSL这么容易,我只是想创建一个

header ("Location: https://www.example.com/mypage.php");

我认为这很容易而且不用担心。但是,每次我这样做,它都会将其转换回http。好吧,你可以认为它创造了一个无法解决的无限循环。我无法弄清楚如何将https保留在那里,以便它将拉动页面的安全版本。如果我使用https直接导航到安全页面,它可以正常工作。唯一的问题是这个重定向。

任何帮助都会很棒!我正在使用POUND作为负载平衡代理。 Web服务器节点上的Apache。 SSL证书在Load Balancer中设置。

3 个答案:

答案 0 :(得分:2)

当进行负载均衡时,“内部”SSL通常会出现:客户端通过负载平衡器进行连接,您可以使用它进行SSL加密,但在我看到的大多数负载均衡器背后都是简单的“HTTP”。尝试让负载均衡器为您设置一个自定义标头,指示 在loadbalancer&之间的HTTPS连接。客户端。

来自http://www.apsis.ch/pound/index_html

  

什么是:   ...   SSL包装器:Pound将解密来自客户端浏览器的HTTPS请求,并将它们作为普通HTTP传递给后端服务器。

从更多手册页:

  

HTTP侦听器   RewriteLocation 0 | 1 | 2
                如果1强制磅改变位置:和内容位置:                 回复中的标题。如果他们指向后端本身或                 监听器(但使用错误的协议)响应将是                 已更改为在请求中显示虚拟主机。默认值:1                 (活性)。如果该值设置为2,则只有后端地址                 相比较;这对于将请求重定向到HTTPS非常有用                 侦听器与HTTP侦听器在同一服务器上。

答案 1 :(得分:0)

重定向到https页面没问题。 您可以检查端口,方案或服务器变量(可能是服务器变量是最好的)来查看https是否已打开,并将其作为重定向的条件

$_SERVER['SERVER_PORT'] == 443 
parse_url($_SERVER['REQUEST_URI'],PHP_URL_SCHEME) == 'https'
$_SERVER['HTTPS'] == 'on'

但是当你有一个无限循环时,一定有其他错误!

答案 2 :(得分:0)

尝试使用load blancer“balance”代替。它只需要大约5分钟的设置,而不是代理,将进行“真正的”负载平衡。我猜你的代理目前正在将https请求重定向到http地址。尝试在不使用平衡器的情况下提出请求。您可以通过在/ etc / hosts文件中设置主机名直接指向服务器而不是负载均衡器的IP来实现此目的