如何在haproxy中启用keep-alive?

时间:2017-10-27 02:55:53

标签: linux http curl web haproxy

这是我的haproxy.conf(haproxy 1.7.9)

global
    log             127.0.0.1 local0
defaults
    retries 3
    option redispatch
    timeout client  30s
    timeout connect 30s
    timeout server  30s
    option http-keep-alive
    http-reuse always

frontend web1
    bind *:8080
    option http-keep-alive
    mode http
    default_backend app1
backend app1
    balance     roundrobin
    option http-keep-alive
    mode http
    server a2 192.168.56.150:8000

原始服务器的卷曲结果:

$ curl -vv http://192.168.56.150:8000/test --keepalive-time 700
* About to connect() to 192.168.56.150 port 8000 (#0)
*   Trying 192.168.56.150...
* Connected to 192.168.56.150 (192.168.56.150) port 8000 (#0)
> GET /test HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.56.150:8000
> Accept: */*
> 
< HTTP/1.1 200 OK 
< Etag: 720-6-59eeda80
< Content-Type: application/octet-stream
< Content-Length: 6
< Last-Modified: Tue, 24 Oct 2017 06:15:28 GMT
< Server: WEBrick/1.3.1 (Ruby/2.0.0/2015-12-16)
< Date: Fri, 27 Oct 2017 02:38:14 GMT
< Connection: Keep-Alive
< 
tests
* Connection #0 to host 192.168.56.150 left intact

haproxy服务器的卷曲结果

$ curl -vv http://192.168.56.150:8080/test --keepalive-time 700
* About to connect() to 192.168.56.150 port 8080 (#0)
*   Trying 192.168.56.150...
* Connected to 192.168.56.150 (192.168.56.150) port 8080 (#0)
> GET /test HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.56.150:8080
> Accept: */*
> 
< HTTP/1.1 200 OK 
< Etag: 720-6-59eeda80
< Content-Type: application/octet-stream
< Content-Length: 6
< Last-Modified: Tue, 24 Oct 2017 06:15:28 GMT
< Server: WEBrick/1.3.1 (Ruby/2.0.0/2015-12-16)
< Date: Fri, 27 Oct 2017 02:38:05 GMT
< 
tests
* Connection #0 to host 192.168.56.150 left intact

我在tcpdump确认从原点到haproxy的回复中有Connection: Keep-Alive

正如你所看到的,haproxy响应中没有Connection: Keep-Alive,我怎样才能使haproxy保持活着?

1 个答案:

答案 0 :(得分:1)

默认情况下,HTTP 1.1以保持活动模式运行,请参阅RFC7230。因此,您不需要明确设置连接标头以使用持久连接(保持活动模式)。
仅在使用HTTP 1.0时才需要连接头,因为它旨在在每次请求后关闭连接。

因此,要验证HAProxy是否处于保持活动模式,您需要使用curl发送多个HTTP请求(而不仅仅是一个),并检查是否只建立并使用了一个连接。
这个serverfault post显示了如何做到这一点。 (注意&#34;正在连接...&#34; &#34;关闭连接&#34; 行)