为了处理HTTPS的流量,我想在haproxy 1.4前面放一个特技。我还需要特技,以添加X转发-为标题。这可以通过haproxy网站上的“stunel-4.xx-xded-for.diff”补丁来实现。
然而,说明中提到:
请注意此修补程序不适用于“保持生存”,.
我的问题是:这对我来说意味着什么?我不确定,
发布于 2011-08-15 17:41:51
这是关于HTTP保持活动的,它允许多个资源请求通过一个TCP会话(使用SSL时,允许一个SSL会话)。这对SSL站点的性能非常重要,因为如果不保持活动状态,则需要对每个请求的资源进行SSL握手。
因此,这里关注的是从客户端一直到后端服务器的一个大的保持生命的会话。这对于性能来说是很重要的,对于现代HTTP服务器来说也是理所当然的,但是这个补丁说它不支持它。让我们看看为什么..。
保持活动会话只是一个接一个的请求--一旦服务器完成对一个请求的响应,服务器就不会发送一个FIN
数据包来结束TCP会话;客户机只需发送另一批头。
为了理解这个补丁正在做什么,下面是一个保持活力对话的例子:
客户端:
GET / HTTP/1.1
Connection: keep-alive
Host: domain.com
...
服务器:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: Apache
Content-Length: 34
.... (other headers)
<html><head>content!</head></html>
这是一个不能保持生命的连接会停止的地方。但是,保持生命允许客户只需发射另一个:
GET /images/some/image.on.the.page.jpg HTTP/1.1
Connection: keep-alive
Host: domain.com
...
对于代理中的客户机ID,一些反向代理可以在每个客户端请求中添加X-Forwarded-For
头。这将告诉上游服务器请求来自何处(而不是从反向代理的IP发起的每个请求),以便在日志记录和其他应用程序需求中保持正常。
X-Forwarded-For
报头需要注入到通过“保持活动”连接发送的每个客户端资源请求中,因为每次都会发送完整的标头;处理X-Forwarded-For
报头并将其转换为“真实的”请求IP是根据每个请求完成的,而不是基于每个TCP保持活动会话的。嘿,也许有一些很棒的反向代理软件,它使用一个保持活动的会话来服务来自多个客户的请求。
这就是这个补丁失败的地方。
该站点上的修补程序监视流中第一组HTTP标头结束时TCP会话的缓冲区,并在第一组头结束后将新标头注入流中。完成后,它将考虑已完成的X-Forwarded-For
作业,并停止扫描新的标头集的末尾。此方法不知道通过后续请求传入的所有未来标头。
不能怪他们;特技并不是真正用于处理和翻译其流的内容。
这将对您的系统产生的影响是,第一个保持活动流的请求将被正确注入X-Forwarded-For
头,所有后续请求都将正常工作--但它们不会有标头。
除非有另一个标头注入修补程序可以处理每个连接的多个客户端请求(或者在堆栈溢出的朋友帮助下对此请求进行调整),否则您可能需要考虑SSL终止的其他选项。
发布于 2011-11-01 11:20:56
STunnel 4.45使用HAProxy 1.15附带的一些新功能(代理协议)正确地修复了这个问题
它还修复了以前的修补程序中的问题,并保持了活力。
发布于 2012-09-16 08:38:40
类似于我在另一个线程中发布的内容,自1.5dev12以来,HAProxy确实在双方都支持本地SSL。因此,让X转发-For,HTTP保持活动,以及一个报头告诉服务器连接是在SSL上建立的,它非常简单,如下所示:
listen front
bind :80
bind :443 ssl crt /etc/haproxy/haproxy.pem
mode http
option http-server-close
option forwardfor
reqadd X-Forwarded-Proto:\ https if { is_ssl }
server srv1 1.1.1.1:80 check ...
...
这比修补特技要容易得多,也比不得不放弃保持活着要好得多。
https://serverfault.com/questions/301221
复制相似问题