Caddy、 SSLDocker、Nginx 性能比较及使用体验

Caddy、 SSLDocker、Nginx 都是可以用来做前端代理的服务,前两者是用go来写,部署比较简单。

Nginx 在部署HTTPS 时比较麻烦(相对其它两者来说),Caddy、 SSLDocker 都是自动配置并且更新HTTPS,这对我这样的懒人来说很有用。个人一直用https://openresty.org/en/ 58,后来在go 的世界发现了https://caddyserver.com/ 169名器,然后在解决多域名反向代理时发现了https://ssldocker.com/ 239小神器。

以下是在一台128MB单核的VPS 上部署一个应用,然后分别用Caddy、 SSLDocker、Nginx做前端,反向代理到该应用端口, 在另外一台VPS 做并发请求。开启ssl、gzip,使用https://github.com/rakyll/hey 39 做并发请求:

# ./hey -n=20000 -c=5 https://mydomain.com/

Caddy、 SSLDocker、Nginx 并发测试结果

Caddy 并发请求测试结果

Summary:Total:    64.9214 secsSlowest:  0.7156 secsFastest:  0.0031 secsAverage:  0.0161 secsRequests/sec: 308.0650Response time histogram:0.003 [1] |0.074 [19888] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎0.146 [2] |0.217 [2] |0.288 [2] |0.359 [90]    |0.431 [1] |0.502 [11]    |0.573 [1] |0.644 [1] |0.716 [1] |

SSLDocker 并发请求测试结果

Summary:Total:   58.7239 secsSlowest:    0.7440 secsFastest: 0.0029 secsAverage: 0.0144 secsRequests/sec:    340.5766Response time histogram:0.003 [1]   |0.077 [19878]  |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎0.151 [4]  |0.225 [9]  |0.299 [84] |0.373 [5]  |0.448 [11] |0.522 [4]  |0.596 [2]  |0.670 [1]  |0.744 [1]  |

Nginx (openresty)并发请求测试结果

Summary:Total:    57.8501 secsSlowest:  0.0523 secsFastest:  0.0029 secsAverage:  0.0144 secsRequests/sec: 345.7212Response time histogram:0.003 [1] |0.008 [539]   |∎∎0.013 [4327]  |∎∎∎∎∎∎∎∎∎∎∎∎∎0.018 [13150] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎0.023 [1397]  |∎∎∎∎0.028 [404]   |∎0.033 [120]   |0.037 [35]    |0.042 [18]    |0.047 [4] |0.052 [5] |

都很稳定,没有失败请求,从 Requests per second (RPS)看:

Caddy 308 < SSLDocker 340 < Nginx 345

三者相差不大,Nginx 和SSLDocker 稍有优势。

顺便测一下应用裸跑的结果,ssl、gzip 为on,RPS为367

Summary:Total:    54.3886 secsSlowest:  0.4766 secsFastest:  0.0026 secsAverage:  0.0136 secsRequests/sec: 367.7241Response time histogram:0.003 [1] |0.050 [19995] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎0.097 [2] |0.145 [0] |0.192 [0] |0.240 [0] |0.287 [1] |0.334 [0] |0.382 [0] |0.429 [0] |0.477 [1] |

再测ssl、gzip 为off 情况,具体数据就不贴了,总对比如下:

# 数值为每秒请求数 RPS
# ssl、gzip on
Caddy 308 < SSLDocker 340 < Nginx 345 < 裸跑 367
# ssl、gzip off
Nginx 376 < 裸跑 424

拿nginx 反向代理和裸跑对比:

开启ssl、gzip 时性能损失 float(367-345)/367 = 5.99%,
关闭ssl、gzip 时性能损失 float(424-376)/424 = 11.32%。

配置文件

Caddy 配置

mydomain.com {gzipproxy  / 127.0.0.1:8999
}
mydomain2.com {proxy  / 127.0.0.1:8888
}

多个服务

SSLDocker 配置

{"Email": "yourmail@domain.com","GzipOn": true,"Http2https": true,"MaxHeader": 10,"Certs": "certs","ProxyItems": [{"Host": "mydomain.com", "Target": "http://localhost:8999"},{"Host": "mydomain2.com", "Target": "http://localhost:8888"}]
}

也是两个服务

Nginx 配置

主配置nginx.conf 使用默认,使用epoll 模式

server {listen 443;server_name mydomain.com;ssl on;ssl_certificate /root/ssl/chained.pem;ssl_certificate_key /root/ssl/domain.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;ssl_prefer_server_ciphers on;location ^~ /.well-known/acme-challenge/ {alias /var/www/myapp/;try_files $uri =404;}location / {proxy_pass_header Server;proxy_set_header Host $http_host;proxy_redirect off;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Scheme $scheme;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://127.0.0.1:8999;}
}

总结

上面的比较是针对个人的使用场景:在一个小VPS 上多挂几个网站而且都使用HTTPS,嫌配置HTTPS 麻烦。以前使用Nginx 则需要注册、配置、验证、添加自动更新任务到Cronjob,如果用Caddy 或SSLDocker,对HTTPS 不用做任何配置,一切都自动完成,其实过程是一样,只是Caddy 和SSLDocker 把这些任务都集成了(go 协程管理真方便)。

Nginx 功能多,成熟稳定;Caddy 功能也在慢慢增多,试着以不同方式实现Nginx 的功能和新鲜的功能;SSLDocker 专注于HTTPS管理和反向代理。如果说Nginx 是成功中年人士,则Caddy 是年轻高富帅,SSLDocker 是嫩屌丝。

相关项目

  • Nginx (Openresty) https://openresty.org/en/ 58
  • Caddy https://caddyserver.com/ 169
  • SSLDocker https://ssldocker.com/ 239

Relative Articles

  • 在自己的网站部署TLS 1.3
  • Golang 减小gc 压力、避免内存泄漏小tips
  • 关于Golang msgpack 和 json 性能的简单比较
  • labstack/echo 是一个快速,不花俏的微型Go Web 框架
  • 用go testing 作单元测试压力测试
  • 理解 golang defer 的实行
  • Golang 合并byte 的性能比较
  • Golang字符串相等比较的性能
  • 5个GoLang 应用优化措施
  • 有点另类的Golang Web框架性能比较

转载来源: https://www.golangnote.com/topic/216.html

关于GolangNote:记录在工作中使用golang 遇到、面临的相关问题及解决方法。如果你在这里获得一些知识或信息,解决你的编程问题,请考虑捐赠给不幸的人或者你喜欢的慈善机构,除捐赠外,种植树木、志愿服务或减少排碳的行为也很有益处。

Caddy、 SSLDocker、Nginx 性能比较及使用体验相关推荐

  1. 如何将 Nginx 性能提升10倍?这10个“套路”请收好!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 提升 ...

  2. Nginx 性能优化

    Nginx 性能优化有这篇就够了! 1.Nginx运行工作进程数量 Nginx 运行工作进程个数一般设置CPU的核心或者核心数x2.如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/p ...

  3. Nginx性能优化功能- Gzip压缩(大幅度提高页面加载速度)

    Nginx开启Gzip压缩功能, 可以使网站的css.js .xml.html 文件在传输时进行压缩,提高访问速度, 进而优化Nginx性能!  Web网站上的图片,视频等其它多媒体文件以及大文件,因 ...

  4. ab测试nginx Nginx性能优化

    转自:https://www.cnblogs.com/nulige/p/9369700.html 1.性能优化概述 在做性能优化前, 我们需要对如下进行考虑 1.当前系统结构瓶颈 观察指标 压力测试 ...

  5. IntelliJ IDEA 2019.2最新解读:性能更好,体验更优,细节处理更完美!

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! IntelliJ IDEA 2019.2 准备 idea 2019.2正式版是在2019年7 ...

  6. 服务器:浅谈 Nginx 性能调优,太实用了!

    Linux系统参数优化 下文中提到的一些配置,需要较新的Linux(2.6以上)内核才能够支持,笔者使用的CentOS 7.4,内核版本3.10,如果不满足需要的话,最好进行相应的升级,毕竟打补丁是件 ...

  7. 老司机整理对Nginx性能优化

    Nginx性能优化应遵循一个原则:一次只调整一项,调整不理想,将修改还原. Linux参数 Nginx很多功能直接使用操作系统实现,操作系统决定nginx上限. 现代linux内核(2.6+)涵盖了大 ...

  8. 使用 Caddy 替代 Nginx,全站升级 https,配置更加简单

    使用 Caddy 替代 Nginx,全站升级 https,配置更加简单 Caddy 是什么? Caddy 是一个多功能的 HTTP web服务器,并且使用Let's Encrypt提供的免费证书,自动 ...

  9. 浅谈Nginx性能调优

    女主宣言 Web服务性能调优是一项系统工程,涵盖许多方面,其中某一环节做的好并不能够保证整体性能好:但是如果某个环节做的不好,那么整体性能必然不会好. 可以调优的配置有很多,绝大多数情况下我们不需要追 ...

最新文章

  1. java数组与字符串编程及答案_04747_Java语言程序设计(一)_第4章_数组和字符串...
  2. 风控大咖教你四步开发风控模型
  3. python爬虫意思_python为什么叫爬虫
  4. OpenStack 计算节点删除
  5. jquery06 jQuery.extend 给jQuery函数添加、继承 静态方法
  6. 平凡的故事:年轻开发者的那些伤心事
  7. python中不能使用下标运算的是_下列选项中,不能使用下标运算的是() (3.0分)_学小易找答案...
  8. jaxen-1.1-beta-6.jar下载地址
  9. 内忧外患,是否应该为移动设备开发游戏?的?
  10. Linux内核4.14版本——alsa框架分析(3)-PCM设备的创建
  11. android视频录制旋转,android – 录制的视频在上传到互联网后旋转90度
  12. [操作系统] elementary os系统美化插件
  13. Linux网络容灾,关于异地容灾的感触
  14. pytorch Module里的children()与modules()的区别
  15. 《伪样本新场景样本挖掘和适应》
  16. PyTorch笔记【1】---A卡安装(RX580)无果后,改为N卡(2070)安装。这年头就不要用CPU了来搞AI了
  17. 记录12款MacBook Pro MC946,A1398拆主板换新喇叭的过程
  18. QQ邮箱不显示图片解决方案
  19. PCL 点云的旋转与平移
  20. OCP问题debug

热门文章

  1. Linux Shell脚本入门教程系列之(十三)Shell分支语句case … esac教程
  2. Shopify:管理一个顶级域名绑定shopify网店
  3. 优秀的 jQuery 文本输入框自动完成 自动提示插件
  4. Swift中文教程(二十三) 高级运算符
  5. linux: chmod,chown命令详解
  6. linux 命令行工具无敌斩
  7. NSURLConnection 下载数据 -- IOS(实例)
  8. Java—CountDownLatch使用详解
  9. linux 分卷解压
  10. 实例变量 成员变量 java 1615135036