首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哈代理+特技+保持-活着?

哈代理+特技+保持-活着?
EN

Server Fault用户
提问于 2011-08-15 14:35:52
回答 4查看 9.3K关注 0票数 10

为了处理HTTPS的流量,我想在haproxy 1.4前面放一个特技。我还需要特技,以添加X转发-为标题。这可以通过haproxy网站上的“stunel-4.xx-xded-for.diff”补丁来实现。

然而,说明中提到:

请注意此修补程序不适用于“保持生存”,.

我的问题是:这对我来说意味着什么?我不确定,

  1. 如果这是为了保持之间的生存
    • 客户和特技
    • 发育障碍和哈代症
    • 或者是haproxy和后端服务器?

  2. 这对性能意味着什么:如果我在一个网页上有100个图标,浏览器需要协商100个完整的SSL连接,还是可以重新使用SSL连接,只创建新的TCP连接?
EN

回答 4

Server Fault用户

回答已采纳

发布于 2011-08-15 17:41:51

这是关于HTTP保持活动的,它允许多个资源请求通过一个TCP会话(使用SSL时,允许一个SSL会话)。这对SSL站点的性能非常重要,因为如果不保持活动状态,则需要对每个请求的资源进行SSL握手。

因此,这里关注的是从客户端一直到后端服务器的一个大的保持生命的会话。这对于性能来说是很重要的,对于现代HTTP服务器来说也是理所当然的,但是这个补丁说它不支持它。让我们看看为什么..。

保持活动会话只是一个接一个的请求--一旦服务器完成对一个请求的响应,服务器就不会发送一个FIN数据包来结束TCP会话;客户机只需发送另一批头。

为了理解这个补丁正在做什么,下面是一个保持活力对话的例子:

客户端:

代码语言:javascript
运行
复制
GET / HTTP/1.1
Connection: keep-alive
Host: domain.com
...

服务器:

代码语言:javascript
运行
复制
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: Apache
Content-Length: 34
.... (other headers)
<html><head>content!</head></html>

这是一个不能保持生命的连接会停止的地方。但是,保持生命允许客户只需发射另一个:

代码语言:javascript
运行
复制
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终止的其他选项。

票数 12
EN

Server Fault用户

发布于 2011-11-01 11:20:56

STunnel 4.45使用HAProxy 1.15附带的一些新功能(代理协议)正确地修复了这个问题

  • http://stunnel.mirt.net/pipermail/stunnel-announce/2011-October/000062.html
  • http://haproxy.1wt.eu/download/1.5/doc/proxy-protocol.txt

它还修复了以前的修补程序中的问题,并保持了活力。

票数 5
EN

Server Fault用户

发布于 2012-09-16 08:38:40

类似于我在另一个线程中发布的内容,自1.5dev12以来,HAProxy确实在双方都支持本地SSL。因此,让X转发-For,HTTP保持活动,以及一个报头告诉服务器连接是在SSL上建立的,它非常简单,如下所示:

代码语言:javascript
运行
复制
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 ...
    ...

这比修补特技要容易得多,也比不得不放弃保持活着要好得多。

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/301221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档