Web Server FAQ
约 3 分钟阅读
标签:FAQ
- 应用服务器 - nginx, caddy, traefik
- 功能为主
- 负载均衡服务器 - haproxy, keepalived
- 性能为主
- VIP - 路由到单一节点 - HA、floating IP
- 基于冗余路由 或 BGP
- 负载均衡 - 根据算法路由到多个节点
Perf
- blog.tjll.net/reverse-proxy-hot-dog-eating-contest-caddy-vs-nginx
- HN #32865497Hacker NewsHacker News #32865497Hacker News
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
- vs. Traefik
- 插件系统和社区强
- 配置 AdminAPI 功能强
- CloudNative 支持弱
- 定位是 Web 服务器
- 特点是 HTTP2、自动 HTTPS
- 支持多 acme 服务商
- 支持作为 acme 服务商
- 功能扩展性好 - xcaddy 动态构建自己需要的插件
- 意味着可能默认插件少,很多时候需要自己构建
- 意味着最终还是只有一个 Binary - 很好分发
- 使用扩展性好 - 支持接口配置、JSON配置、Caddyfile 配置
- 配置复杂
- 门槛高
- vs. Traefik
- Traefik
- vs. Caddy
- 专注于 CloudNative
- 服务发现强
- 定位是微服务下的负载均衡、边界路由、反向代理
- 偏向 Cloud Native
- 对 K8S 支持较好 - 支持作为 Ingress
- V2 版本调整了前后端概念 - 结构更加清晰易于配置
- 支持 TCP 和 SNI 负载路由
- acme 不支持分布式 - 付费
- 扩展性弱于 Caddy
- 默认功能相对多一些
- 支持 ACL 配置
- vs. Caddy
Nginx vs HAProxy
- Nginx
- 擅长应用层控制
- 支持 Web Hosting
- 作为负载均衡限流能力较弱
- 统计指标少
- 支持 TCP 和 UDP
- 更多应用层面的感知 - 7 层
- 通过模块提供各种功能
- 收费版 Nginx Plus
- HAProxy
- 擅长负载均衡
- 不支持作为 Web 服务器
- 比 Nginx 更擅长 SSL offload / SSL terminate
- 主要角色是负载均衡
- 支持非常多的限流策略
- 支持非常多的统计指标
- 不支持 UDP #62GitHub Issuehaproxy/haproxy#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笔记varnishvarnishcache/varnish-cache · 参考 · Varnish Documentation · S3 as a Backend · https://gist.github.com/fevangelou/84d2ce05896cab5f730a打开:/notes/devops/web/varnish
- ingress
- 提供服务 - 服务端 - 上游一般为内部服务
- squid笔记Squidsquid-cache/squid · Web 缓存服务器 - 用于缓存网页内容以便于快速返回 · 对于动态内容会相对较慢 · 可用于反向代理 - 出网缓存 - 服务端 · 例如缓存静态站点,类似于 Vanish 角色 · 可用于转发代理 - 入网缓存 - 客户端打开:/notes/service/network/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"关联信息
反向链接、本文链接的其他页面和外部资料。
反向链接
- Web笔记 · Web FAQ
Web 框架 · Web 服务 · 反向代理 服务 · 缓存 服务 · Awesome Web · Web FAQ
站内链接
参考资料
GitHub2 条
- haproxy/haproxy#62github.com/haproxy/haproxy/issues/62
- pjperez/httpinggithub.com/pjperez/httping
Hacker News1 条
- Hacker News #32865497HN #32865497
其他外链6 条
- blog.tjll.net/reverse-proxy-hot-dog-eating-contest-caddy-vs-nginxblog.tjll.net/reverse-proxy-hot-dog-eating-contest-caddy-vs-nginx
- dnsdist.orgdnsdist.org/
- www.haproxy.com/blog/haproxy-and-varnish-comparisonwww.haproxy.com/blog/haproxy-and-varnish-comparison
- www.haproxy.com/blog/haproxys-load-balancing-algorithm-for-static-content-delivery-with-varnishwww.haproxy.com/blog/haproxys-load-balancing-algorithm-for-static-content-delivery-with-varnish
- www.haproxy.com/products/community-vs-enterprise-editionwww.haproxy.com/products/community-vs-enterprise-edition
- www.nginx.com/products/nginxwww.nginx.com/products/nginx