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

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

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 做并发请求:

[[213268]]

  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 是屌丝。

责任编辑:武晓燕 来源: GOLANG笔记
相关推荐

2016-12-07 10:42:57

排序算法实例

2011-04-15 10:26:38

JavaMVC

2009-05-25 08:39:08

iPhone苹果移动OS

2011-05-18 14:52:04

XML

2020-10-23 07:43:37

Log配置性能

2013-12-16 10:20:48

MySQL数据库

2023-11-20 10:34:09

语言

2013-12-18 10:27:11

OpenMP线程

2012-12-03 10:26:51

Scala

2009-12-04 19:28:25

FreeBSD 8.0Ubuntu 9.10性能比较

2010-12-27 16:01:45

jQuery选择器

2023-11-19 21:17:58

GoRust

2009-07-01 18:12:18

JSP的优势性能比较

2011-08-09 10:21:55

SQL Server存储过程分页

2017-11-07 09:42:32

数据库MySQLMEMORY

2013-04-03 10:04:36

MySQL 5.6

2015-02-05 09:25:51

HTTPSSPDYHTTP2

2010-03-10 16:35:23

Python编程语言

2011-07-06 14:18:40

Percona SerMySQL

2020-07-27 08:24:42

编程语言C语言Java
点赞
收藏

51CTO技术栈公众号