有幸可以跟閱讀我文章的人交流,真的很榮幸,一起討論可以共同成長
這裡要來比較 Caddy2 和 Nginx 在性能上面的差異,做一下簡單的測試

版本

配置

Caddy2 做了基本的設定,而 Nginx 則是不去變動安裝好就存在的設定,單純只加上 fastcgi 以及添加 index.php

讓兩者使其可以讀取 wordpress 的首頁

1
2
3
4
5
6
:80 {
  root * /var/www/html/wordpress
  encode gzip
  php_fastcgi unix//run/php/php7.4-fpm.sock
  file_server
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 1024;
    # multi_accept on;
}

http {
    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;

    ##
    # Virtual Host Configs
    ##

    # Default server configuration
    server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html/wordpress;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html index.php;

        server_name _;

        location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            # With php-fpm (or other unix sockets):
            fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        }
    }
}

測試

使用 siege 進行一個簡單的測試,環境也沒有特別調整

畢竟不是針對業務環境,而是針對工具性能的比較

S1

1
siege --time=5M -c 50 'http://192.168.0.1'

S2

1
siege --time=5M -c 100 'http://192.168.0.1'
Measurement caddy2-S1 nginx-S1 caddy2-S2 nginx-S2
Transactions 149190 hits 183468 hits 148142 hits 183768 hits
Availability 100.00 % 100.00 % 100.00 % 100.00 %
Elapsed time 299.96 secs 299.53 secs 299.27 secs 299.67 secs
Data transferred 1157.10 MB 5768.63 MB 1148.95 MB 5778.06 MB
Response time 0.10 secs 0.08 secs 0.20 secs 0.16 secs
Transaction rate 497.37 trans/sec 612.52 trans/sec 495.01 trans/sec 613.23 trans/sec
Throughput 3.86 MB/sec 19.26 MB/sec 3.84 MB/sec 19.28 MB/sec
Concurrency 49.93 49.94 99.78 99.81
Successful transactions 149190 183468 148142 193768
Failed transactions 0 0 0 0
Longest transaction 0.68 0.73 2.35 1.11
Shortest transaction 0.00 0.00 0.00 0.00

效能監控

最近剛好架好 Grafana 監視儀表板,既然測試那順便監控一下測試時的效能變化

CPU運行滿載,記憶體維持在 730M 左右

CPU運行滿載,記憶體維持在 680M 左右

CPU運行滿載,記憶體維持在 740M 左右

CPU運行滿載,記憶體維持在 690M 左右

結論

基本上 Caddy2 的測試結果都是低於 Nginx,不過這不會導致我不去使用 Caddy2

個人還是對 Caddy 的設定簡潔和簡便性感興趣,不過若真的有一定硬體效能的情況,還是會視場景和需求

至於 Caddy2 是否有更好的設置方法,可能需要進一步研究

之後可能還需要要對 Caddy2 的更新版本在進行補測,Caddy2 才剛釋出可能會有很多部分進行優化