|
|
|
|
移动端

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

Nginx 在部署HTTPS 时比较麻烦(相对其它两者来说),Caddy、 SSLDocker 都是自动配置并且更新HTTPS,这对我这样的懒人来说很有用。个人一直用Nginx (openresty) 1,后来在go 的世界发现了Caddy 1,然后在解决多域名反向代理时发现了SSLDocker 7。

作者:佚名来源:GOLANG笔记|2017-12-14 10:16

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

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

Nginx 在部署HTTPS 时比较麻烦(相对其它两者来说),Caddy、 SSLDocker 都是自动配置并且更新HTTPS,这对我这样的懒人来说很有用。个人一直用Nginx (openresty) 1,后来在go 的世界发现了Caddy 1,然后在解决多域名反向代理时发现了SSLDocker 7。

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

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

Caddy、 SSLDocker、Nginx 并发测试结果

Caddy 并发请求测试结果

  1. Summary: 
  2.   Total:    64.9214 secs 
  3.   Slowest:  0.7156 secs 
  4.   Fastest:  0.0031 secs 
  5.   Average:  0.0161 secs 
  6.   Requests/sec: 308.0650 
  7.  
  8. Response time histogram: 
  9.   0.003 [1] | 
  10.   0.074 [19888] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 
  11.   0.146 [2] | 
  12.   0.217 [2] | 
  13.   0.288 [2] | 
  14.   0.359 [90]    | 
  15.   0.431 [1] | 
  16.   0.502 [11]    | 
  17.   0.573 [1] | 
  18.   0.644 [1] | 
  19.   0.716 [1] | 

SSLDocker 并发请求测试结果

  1. Summary: 
  2.   Total:    63.0618 secs 
  3.   Slowest:  0.4883 secs 
  4.   Fastest:  0.0030 secs 
  5.   Average:  0.0156 secs 
  6.   Requests/sec: 317.1490 
  7.  
  8. Response time histogram: 
  9.   0.003 [1] | 
  10.   0.052 [19865] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 
  11.   0.100 [1] | 
  12.   0.149 [2] | 
  13.   0.197 [1] | 
  14.   0.246 [0] | 
  15.   0.294 [15]    | 
  16.   0.343 [95]    | 
  17.   0.391 [0] | 
  18.   0.440 [2] | 
  19.   0.488 [18]    | 

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

Summary:

  1. Summary: 
  2.   Total:    57.8501 secs 
  3.   Slowest:  0.0523 secs 
  4.   Fastest:  0.0029 secs 
  5.   Average:  0.0144 secs 
  6.   Requests/sec: 345.7212 
  7.  
  8. Response time histogram: 
  9.   0.003 [1] | 
  10.   0.008 [539]   |∎∎ 
  11.   0.013 [4327]  |∎∎∎∎∎∎∎∎∎∎∎∎∎ 
  12.   0.018 [13150] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 
  13.   0.023 [1397]  |∎∎∎∎ 
  14.   0.028 [404]   |∎ 
  15.   0.033 [120]   | 
  16.   0.037 [35]    | 
  17.   0.042 [18]    | 
  18.   0.047 [4] | 
  19.   0.052 [5] | 

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

  1. Caddy 308 < SSLDocker 317 < Nginx 345 

三者相差不大,两个用go 实现的相差很小。

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

  1. Summary: 
  2.   Total:    54.3886 secs 
  3.   Slowest:  0.4766 secs 
  4.   Fastest:  0.0026 secs 
  5.   Average:  0.0136 secs 
  6.   Requests/sec: 367.7241 
  7.  
  8. Response time histogram: 
  9.   0.003 [1] | 
  10.   0.050 [19995] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 
  11.   0.097 [2] | 
  12.   0.145 [0] | 
  13.   0.192 [0] | 
  14.   0.240 [0] | 
  15.   0.287 [1] | 
  16.   0.334 [0] | 
  17.   0.382 [0] | 
  18.   0.429 [0] | 
  19.   0.477 [1] | 

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

  1. # 数值为每秒请求数 RPS  
  2. # ssl、gzip on  
  3. Caddy 308 < SSLDocker 317 < Nginx 345 < 裸跑 367 
  4. # ssl、gzip off 
  5. Nginx 376 < 裸跑 424 

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

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

配置文件

Caddy 配置

  1. mydomain.com { 
  2.     gzip 
  3.     proxy  / 127.0.0.1:8999 
  4. mydomain2.com { 
  5.     proxy  / 127.0.0.1:8888 

多个服务

SSLDocker 配置

  1.   "Email""yourmail@domain.com"
  2.   "GzipOn"true
  3.   "Http2https"true
  4.   "MaxHeader": 10, 
  5.   "Certs""certs"
  6.   "ProxyItems": [ 
  7.     {"Host""mydomain.com""Target""http://localhost:8999"}, 
  8.     {"Host""mydomain2.com""Target""http://localhost:8888"
  9.   ] 

也是两个服务

Nginx 配置

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

  1. server { 
  2.     listen 443; 
  3.     server_name mydomain.com; 
  4.  
  5.     ssl on
  6.     ssl_certificate /root/ssl/chained.pem; 
  7.     ssl_certificate_key /root/ssl/domain.key
  8.  
  9.     ssl_session_timeout 5m; 
  10.  
  11.     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
  12.     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; 
  13.     ssl_prefer_server_ciphers on
  14.  
  15.     location ^~ /.well-known/acme-challenge/ { 
  16.         alias /var/www/myapp/; 
  17.         try_files $uri =404; 
  18.     } 
  19.  
  20.     location / { 
  21.         proxy_pass_header Server; 
  22.         proxy_set_header Host $http_host; 
  23.         proxy_redirect off
  24.         proxy_set_header X-Real-IP $remote_addr; 
  25.         proxy_set_header X-Scheme $scheme; 
  26.         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
  27.         proxy_pass http://127.0.0.1:8999; 
  28.     } 

总结

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

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

【编辑推荐】

  1. 使用Nginx搭建高可用,高并发的WCF集群
  2. 服务器Nginx与Apache优缺点对比
  3. 学会Nginx,10倍提升你的Web应用性能!
  4. Linux下Nginx+多Tomcat负载均衡实现详解
  5. 解决Nginx服务返回500状态码问题
【责任编辑:武晓燕 TEL:(010)68476606】


点赞 0
分享:
大家都在看
猜你喜欢
24H热文
一周话题
本月最赞

视频课程+更多

热门职位+更多

读 书 +更多

Absolute C++中文版(原书第2版)  

本书是讲解C++语言程序设计的优秀教程。全书围绕C++语言来组织,开始章节介绍编程的普通感念,接下来详细介绍C++中的继承、多态、异常处理...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊