前言
以下是在一台128MB单核的VPS 上部署一个应用,然后分别用Caddy、 SSLDocker、Nginx做前端,反向代理到该应用端口, 在另外一台VPS 做并发请求。开启ssl、gzip,使用 hey 做并发请求:
1 | ./hey -n=20000 -c=5 https://mydomain.com/ |
从 Requests per second (RPS)看:
Caddy 308 < SSLDocker 317 < Nginx 345
三者相差不大,Nginx 和SSLDocker 稍有优势。
性能上Nginx优于Caddy和SSLDocker,但是Caddy、 SSLDocker 都能自动配置并且更新HTTPS。
没有上 CDN, 用 Caddy 自动配置,续费证书很方便
但是有了 CDN,CDN上也需要一套证书, 这样一来,不管如何,证书都是要手动处理, 那这样一对比,Caddy 几乎没有什么压倒性的优势了,而且 Caddy 的生态不如 Nginx 成熟
个人站点建议用Caddy,企业站点用Nginx。
安装
官方网址
https://caddyserver.com/docs/install
本文使用的是Caddy2
Caddy配置升级指南
https://caddyserver.com/docs/v2-upgrade
Ubuntu
1 | sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https |
CentOS
1 | yum install yum-plugin-copr |
查看是否安装成功
1 | caddy version |
启动
1 | sudo systemctl daemon-reload |
验证是否启动
1 | systemctl status caddy |
配置文件路径
/etc/caddy/Caddyfile
修改配置后 重新加载配置
1 | systemctl reload caddy |
常见配置
引用配置文件
1 | import /etc/caddy/vhosts/* |
HTTPS
1 | www.makeshuo.cn { |
注意
如果不写端口 默认会自动使用SSL证书,并且端口号为443
1 | www.makeshuo.cn:8888 { |
注意
就算写了端口号,只要不是80,也会使用SSL证书。
注意一个域名下的子域名都是可以申请证书的,但是第一个申请的速度较快,后续的会稍慢点。因为这个原因我差点以为它一个域名只能申请一个。
HTTP
如果不想使用SSL证书,单纯的HTTP访问有以下两种方式
1 | www.makeshuo.cn:80 { |
或者
1 | http://www.makeshuo.cn { |
或者
1 | http://www.makeshuo.cn:8888 { |
自定义SSL证书
1 | www.psvmc.cn { |
同时映射多个地址
1 | localhost:8888, |
反向代理
1 | www.psvmc.cn { |
负载均衡
1 | www.psvmc.cn { |
Websocket反向代理
1 | ws.psvmc.cn { |
注意
Websocket proxying “just works” in v2; there is no need to “enable” websockets like in v1.
跨域访问
1 | (cors) { |
可使用的地址格式
localhost
localhost:8080
127.0.0.1
:443
[::1]:8080
http://example.com
example.com
example.com/foo/*
*.example.com
example.com:8888
注意1:
Automatic HTTPS is enabled if your site’s address contains a hostname or IP address. This behavior is purely implicit, however, so it never overrides any explicit configuration. For example, if the site’s address is
http://example.com
, auto-HTTPS will not activate because the scheme is explicitlyhttp://
.
Traefik-v2.x
Traefik
与 Nginx
一样,是一款优秀的反向代理工具,或者叫 Edge Router
。至于使用它的原因则基于以下几点
- 无须重启即可更新配置
- 自动的服务发现与负载均衡
- 与
docker
的完美集成,基于container label
的配置 - 漂亮的
dashboard
界面 metrics
的支持,对prometheus
和k8s
的集成
各大网关对比
支持公司 | 实现语言 | 亮点 | 不足 | |
---|---|---|---|---|
Nginx(2004) | Nginx Inc | C/Lua | 高性能,成熟稳定 | 门槛高,偏运维,可编程弱 |
Zuul1(2012) | Netflix/Pivotal | Java | 成熟 | 门槛较高 |
Spring Cloud Gateway(2016) | Pivotal | Java | 异步,配置灵活 | 早期产品 |
Envoy(2016) | Lyft | C++ | 高性能,可编程API/ServiceMesh集成 | 门槛较高 |
Kong(2014) | Kong Inc | OpenResty/Lua | 高性能,可编程API | 门槛较高 |
Traefik(2015) | Containous | Golang | 云原生,可编程API/对接各种服务发现 | 生产案例不太多 |
Zuul和Spring Cloud Gateway结合Spring Cloud全家桶结合使用效果较好。
参见: