代码之家  ›  专栏  ›  技术社区  ›  manikawnth

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

  •  1
  • manikawnth  · 技术社区  · 8 年前

    我不太清楚有哪些选择 http-request http-response 在HAProxy配置中。 许多PARM似乎用于修改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引用),而不是 用例 透视图(如用户指南)。

    所以,如果我问了一个荒谬的问题,请不要介意,请友好地回答。谢谢

    1 回复  |  直到 8 年前
        1
  •  3
  •   Michael - sqlbot    8 年前

    有什么区别?

    前两种是相反的。

    配置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
    

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

    timeout client 5000
    

    这个和 http请求超时 是的,但并非完全如此。如果此计时器短于 http请求超时 后者永远不会开火。此计时器适用 随时 服务器需要来自客户端的数据。如果此计时器触发,事务将中止。我 相信 如果发生这种情况,代理将关闭连接。

    timeout server 5000
    

    这是等待服务器发送数据所花费的时间。它也与 http请求超时 ,因为该窗口在该计时器开始运行之前已经关闭。如果我们正在等待服务器发送数据,并且它空闲了这么长时间,则事务将被中止 504 Gateway Timeout 错误是由HAProxy造成的,客户端连接已关闭。

    所以,正如你所看到的,这三者之间的重叠实际上是最小的 http请求超时 .


    你没有真正问,但你会发现这两件事之间有很大的重叠 http-response set-header rsp[i]rep http-request set-header req[i]rep 这个 [req|rsp][i]rep 关键字表示为兼容性而维护的较旧功能,但在很大程度上被引入的较新功能所淘汰,而且,与第一眼看上去可能出现的重叠不多,因为较新功能可以比旧功能做得更多。


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

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