haproxy 的压缩策略仅在 http 模式下生效,需编译时启用 use_zlib=1 并在配置中显式设置 compression algo 和 type 等参数,支持 gzip/deflate 算法及 mime 类型匹配,避免重复压缩和小文件开销。

HAProxy 的压缩策略主要用于减少 HTTP 响应体的传输体积,节省带宽、提升页面加载速度。它只在 HTTP 模式(mode http) 下生效,不适用于 TCP 模式(如 SSH、数据库代理等)。启用压缩需满足两个前提:编译时开启 USE_ZLIB=1,且配置中显式启用压缩功能。
启用压缩功能的前提
确保安装 HAProxy 时已启用 zlib 支持:
make TARGET=linux-glibc USE_ZLIB=1 ... PREFIX=/usr/local/haproxy
若已安装但未启用 USE_ZLIB,需重新编译安装,否则配置中的 compression 指令将被忽略。
在配置中定义压缩策略
压缩相关指令写在 defaults、frontend 或 backend 段中(推荐放在 defaults 统一管理),关键参数如下:
compression algo gzip
指定压缩算法(支持gzip和deflate,生产环境首选gzip)compression type text/html text/plain text/css text/javascript application/javascript application/json
列出允许压缩的 MIME 类型;仅匹配Content-Type响应头中声明的类型才触发压缩compression offload(可选)
表示由 HAProxy 执行压缩(默认行为);若后端已压缩,可配合option http-ignore-probes避免重复压缩
示例配置片段:
defaults
mode http
option http-keep-alive
compression algo gzip
compression type text/html text/plain text/css text/javascript application/javascript application/json application/xml
timeout connect 5s
timeout client 30s
timeout server 30s
⚠️ 注意:
- 不要对已压缩资源(如
.jpg,.png,.mp4,.woff2)再压缩,徒增 CPU 开销;application/json和text/xml值得压缩,尤其 API 返回体较大时;- 若后端服务(如 Node.js、Spring Boot)本身已启用 Gzip,建议关闭 HAProxy 压缩,避免双重压缩或损坏编码。
验证压缩是否生效
-
发起请求并检查响应头:
curl -H "Accept-Encoding: gzip" -I http://haproxy-ip/
正常应返回:
FastAPI Flask Proxy下载FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
Content-Encoding: gzip Vary: Accept-Encoding
查看 HAProxy 日志(需开启
option httplog)或使用浏览器开发者工具 → Network → Response Headers 确认Content-Encoding: gzip存在。
进阶控制(可选)
-
控制最小响应体大小(避免小文件压缩开销):
compression min-length 200
小于 200 字节的响应不压缩。
-
设置最大压缩级别(zlib 级别 1~9,默认为 6):
compression level gzip 5
数值越高压缩率越高、CPU 消耗越大;生产环境建议 4–6。
-
禁用对特定路径压缩(如
/api/health):acl no_compress path_beg /api/health compression off if no_compress
不复杂但容易忽略:压缩是「响应侧」功能,只作用于 HAProxy → 客户端方向;它不压缩请求体,也不影响 TCP 层流量。










