我们在所有应用程序之前都有一个HAProxy。它将所有http流量重定向到https,管理ssl并进行一些重写,将请求分割到/*
和/api/*
到不同的后端。
一个后端处理最长可达3分钟的请求。此请求可以经常触发,但也会经常取消,如下所示:
为减少负载,后端服务器处理已取消的请求并停止工作。但是在HAProxy之间,我的后端服务器无法识别已取消的请求。我认为option abortonclose
将是我正在寻找的选项,但它不能按预期工作。
以下是我们的配置片段
...
defaults
log global
mode http
option redispatch
option tcplog
option dontlognull
option abortonclose
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout check 10s
...
listen redirect-http-proxy
bind xxx.xxx.xxx.xxx:80
acl http ssl_fc,not
http-request redirect scheme https if http
frontend proxy_ssl
bind xxx.xxx.xxx.xxx:443 ssl crt /etc/ssl/private/xxx.pem
option tcpka
#map-file
use_backend %[base,lower,map_beg(/etc/haproxy/xxx.map,bk_default)]
...
backend my-backend-name
balance roundrobin
option tcp-check
server my-server xxx.xxx.xxx.xxx:12345/api check port 12345 inter 5000 rise 2 fall 5