gpt4 book ai didi

apache - 说服 Apache 使用原始客户端协议(protocol)

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:25 25 4
gpt4 key购买 nike

所以我有一个相对直接的服务器堆栈,利用 SSL 卸载和 HTTP 负载平衡器。设置看起来像这样:

(client) -> (SSL offload - stud) -> (balancer - haproxy) -> (http server - apache)

我的问题不是把所有这些都堵上。它工作得很好,老实说,我对设置它的直截了当感到震惊。我还将添加 HTTP 客户端直接连接到 haproxy,从而绕过卸载的 SSL。 郑重声明,上述每个部分都有多余的合作伙伴。

这个问题有点抽象。我将从演示开始。客户端通过设置向 https://myserver.tld/scp 发出请求(为了清楚起见,删除了一些 header )

GET /scp HTTP/1.1
Host: myserver.tld
(headers added by haproxy)
X-Forwarded-For: [original::client:ip]
X-Forwarded-Proto: https

然后服务器响应

HTTP/1.1 301 Moved Permanently
Date: Wed, 03 Jul 2013 03:16:25 GMT
Server: Apache/2.2.15 (CentOS)
Location: http://myserver.tld/scp/
Content-Length: 344
Content-Type: text/html; charset=iso-8859-1

所以 Apache mod_dir 发送一个重定向到同一个 URL 并带有尾部斜杠。这样做是对的。那不是问题所在。问题是 HTTPS 协议(protocol)丢失了。同样,我认为 Apache 重定向到 HTTP URL 是正确的,毕竟它从上述堆栈接收到的连接是常规 HTTP 连接。

所以从Apache的角度来看,客户端请求了一个普通的HTTP连接。 HTTPS 标志与所有其他 SSL 信息一起关闭,因为 session 的 SSL 部分由 stud 处理。

尽管(在 Apache 内部)我有一个有效的 X-Forwarded-Proto header ,但我无法找到一种方法来告诉 Apache 原始客户端连接是 HTTPS 并且目录斜线重定向由 mod_dir 应该使用 https:// 协议(protocol)。我错过了什么?

我唯一想到的是重写 haproxy 中的 Location header ,以便 HTTPS 转发连接将 http:// 替换为 https ://,但我真的不认为这种方法很优雅。我更希望 Apache(和(不要伤害我)链下的 PHP)被告知并将连接视为普通 HTTPS 连接。

请帮忙!

PS - 我以前听人说过,如果你不得不问,那你就错了。也许这是这里的根本问题,但这似乎是一个如此简单的困境,我觉得自己是唯一一个来到这里的人。

最佳答案

您可以通过在 ServerName 指令中包含协议(protocol)来做到这一点:

ServerName https://my-server-name

根据 Apache docs :

Sometimes, the server runs behind a device that processes SSL, such as a reverse proxy, load balancer or SSL offload appliance. When this is the case, specify the https:// scheme and the port number to which the clients connect in the ServerName directive to make sure that the server generates the correct self-referential URLs.

关于apache - 说服 Apache 使用原始客户端协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17439330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com