Web Server FAQ
tip
- 应用服务器 - nginx, caddy, traefik
- 功能为主
- 负载均衡服务器 - haproxy, keepalived
- 性能为主
- VIP - 路由到单一节点 - HA、floating IP
- 基于冗余路由 或 BGP
- 负载均衡 - 根据算法路由到多个节点
Perf
SOCKS vs HTTP vs HTTPS
- HTTP
- 支持最广泛的协议
- 基于 HTTP 的 CONNECT 方法 - 7 层协议
- wget 只支持 http
- 一般支持 Basic 鉴权
- 请求是明文感知更多细节
- 支持复杂转发逻辑 - privoxy
- 路径, 域名, 头
- 更加智能的转发
- 可以配合缓存服务使用
- 例如 squid - 需结合 tls 使用
- 可以做 TCP 通道
- SOCKS
- 支持程度仅次于 HTTP
- TCP 协议 - 5 层协议
- 支持 UDP
- 最容易的协议 -
ssh -d 1080
- 基于握手进行协商,一个地址一个端口进行映射
- DNS 在远程进行解析
- HTTPS
- 使用少
- HTTP + TLS
WebServer vs Proxy
- WebServer - nginx, apache
- 支持静态文件
- 支持 cgi, fastcgi 等应用协议
- Proxy - haproxy
- 支持 HTTP, HTTPS
- 支持 TCP, UDP
WebServer 也可以是 Proxy
Caddy vs Traefik
- Caddy
- 定位是 Web 服务器
- 特点是 HTTP2、自动 HTTPS
- 支持多 acme 服务商
- 支持作为 acme 服务商
- 功能扩展性好 - xcaddy 动态构建自己需要的插件
- 意味着可能默认插件少,很多时候需要自己构建
- 意味着最终还是只有一个 Binary - 很好分发
- 使用扩展性好 - 支持接口配置、JSON配置、Caddyfile 配置
- 配置复杂
- 门槛高
- Traefik
- 定位是微服务下的负载均衡、边界路由、反向代理
- 偏向 Cloud Native
- 对 K8S 支持较好 - 支持作为 Ingress
- V2 版本调整了前后端概念 - 结构更加清晰易于配置
- 支持 TCP 和 SNI 负载路由
- acme 不支持分布式 - 付费
- 扩展性弱于 Caddy
- 默认功能相对多一些
- 支持 ACL 配置
Nginx vs HAProxy
- Nginx
- 擅长应用层控制
- 支持 Web Hosting
- 作为负载均衡限流能力较弱
- 统计指标少
- 支持 TCP 和 UDP
- 更多应用层面的感知 - 7 层
- 通过模块提供各种功能
- 收费版 Nginx Plus
- ⚠️ 社区版 upstream 的 host 不会变 - 不会随 dns 变化 - 对于 LB 来说比较致命
- HAProxy
- 擅长负载均衡
- 不支持作为 Web 服务器
- 比 Nginx 更擅长 SSL offload / SSL terminate
- 主要角色是负载均衡
- 支持非常多的限流策略
- 支持非常多的统计指标
- 不支持 UDP #62
- 如果是 DNS 负载推荐用 dnsdist
- 2.3 开始支持 QUIC 支持部分 UDP 负载
- 代码量和逻辑比 Nginx 简单
- 收费版 - HAProxy EE
- 选择 HAProxy
- 负载均衡
- SSL Offload
- 入口 - SNI、反向代理、SSL Offload
- 希望看到状态和监控
- 选择 Nginx
- 需要托管网站
- 需要应用层控制
- 需要实现应用网关
Caddy v1 vs Caddy v2
- Caddy v1
- 通过配置文件配置 - 简单/功能有限
- 全量 reload
- Caddy v2
- 通过接口配置 - 更加灵活/复杂
- 方便拓展
- 可以 API 控制
- 细粒度动态配置
HAProxy vs Keepalived
- HAProxy
- 支持 4 层 TCP 和 7 层 HTTP
- 感知部分 4 层协议 - 例如 syslog
- 反向代理
- Keepalived
- 支持 4 层 TCP、UDP 负载
- 用于实现 VIP
两者面向不同场景,大部分使用使用 haproxy,如果需要 udp 考虑 keepalived 或者 nginx。
Varnish vs Squid vs HAProxy
都是 HTTP 缓存服务
- varnish
- ingress
- 提供服务 - 服务端 - 上游一般为内部服务
- squid
- egress
- 消费服务 - 使用端 - 上游一般为外部服务
- HAProxy
- ingress
- 内存缓存
- 缓存功能业余
- 可配合 varnish 使用
- HAProxy’s Load-Balancing Algorithm for Static Content Delivery with Varnish
- HAProxy and Varnish Comparison
httping
alias httping="curl --silent --max-time 1 --output /dev/null --fail --head"