什么是HAProxy的http请求和http响应?

时间:2016-12-20 15:27:20

标签: haproxy

我不太清楚HAProxy配置中的选项http-requesthttp-response。 许多parms似乎用于修改http请求和响应,但我发现它可以使用常规option来完成

之间有什么区别
http-request set-src hdr(x-forwarded-for)  #and
option forwardfor

还有什么区别:

connect timeout 5000
client timeout 5000
server timeout 5000        #And

http-request timeout 5000

我是haproxy的新手,文档是从配置参数透视图(如api参考)而不是用例透视图(就像用户一样)编写的-guide)。

所以如果我问一个荒谬的问题,请不要介意和回答。感谢

1 个答案:

答案 0 :(得分:2)

  

有什么区别?

前两个是对立的。

配置HAProxy以使用X-Forward-For标头的内容来建立其请求源地址的内部概念,而不是启动入站连接的实际IP地址:

http-request set-src hdr(x-forwarded-for)

获取入站连接的IP地址并为下游服务器的优势添加X-Forwarded-For标头:

option forwardfor
  

还有什么区别?

让我们倒退一下。

首先,这在我所知道的任何版本中都无效:

http-request timeout 5000

我相信你的意思是......

timeout http-request 5000 

...设置客户端发送完整有效HTTP标头的超时时间以及标头结尾的额外\r\n。这个计时器通常不适用于正文,如果只有一个 - 只有请求标题。如果此计时器触发,则中止事务,返回408 Request Timeout,并强制关闭客户端连接。一旦收到完整的请求标题,此计时器就会停止。

  

默认情况下,此超时仅适用于请求的标头部分,   而不是任何数据。收到空行后,此超时为   不再使用了。

     

http://cbonte.github.io/haproxy-dconv/1.6/configuration.html#4-timeout%20http-request

注意:http-request完全不同,用于在请求发送到后端服务器之前在事务生命周期的请求处理阶段操作请求。

继续,这些实际上也不是有效的。

connect timeout 5000
client timeout 5000
server timeout 5000

似乎你已经颠倒了关键字。我相信你正在考虑这些:

timeout connect 5000

这是等待后端通过完成3次握手的共享来接受我们的TCP连接的最长时间。它与timeout http-request无关,这只是客户端发送初始请求的时间。如果此计时器触发,则代理将中止事务并返回503 Service Unavailable

timeout client 5000

这个与timeout http-request重叠,但不完全重叠。如果此计时器短于timeout http-request,则后者永远不会发射。此计时器在服务器期望来自客户端的数据的任何时间应用。如果此计时器触发,则事务将中止。我相信如果发生这种情况,代理就会关闭连接。

timeout server 5000

这是等待服务器发送数据所花费的时间。它也与timeout http-request没有重叠,因为该窗口在此计时器开始运行之前已经关闭。如果我们正在等待服务器发送数据,并且它长时间空闲,则事务中止,HAProxy发生504 Gateway Timeout错误,并且客户端连接已关闭。

因此,正如您所看到的,这三者与timeout http-request之间的重叠实际上非常小。

您并没有真正提出问题,但您会发现http-response set-headerrsp[i]rep以及http-request set-headerreq[i]rep之间的重叠。 [req|rsp][i]rep关键字代表较旧的功能,这些功能是为了兼容性而维护的,但在很大程度上已经被引入的新功能所取代,而且,乍一看可能没有那么多的重叠,因为较新的功能可以做得更多比旧的。

  

我是haproxy的新手,文档是从配置参数角度编写的(如api参考),而不是用例视角(如用户指南)。

这似乎是一个公平的观点。