├── README.md ├── whoami.conf ├── nginx.conf └── docker-compose.yml /README.md: -------------------------------------------------------------------------------- 1 | # Traefik vs Nginx Benchmark 2 | 3 | ``` 4 | # Traefik v3.0 5 | wrk -t20 -c1000 -d3s -H "Host: benchmark.whoami" --latency http://127.0.0.1:8000/bench 6 | 7 | # Traefik v2.9 8 | wrk -t20 -c1000 -d3s -H "Host: benchmark.whoami" --latency http://127.0.0.1:8002/bench 9 | 10 | # Nginx 11 | wrk -t20 -c1000 -d3s -H "Host: benchmark.whoami" --latency http://127.0.0.1:8001/bench 12 | 13 | # Pure Whoami 14 | wrk -t20 -c1000 -d3s -H "Host: benchmark.whoami" --latency http://127.0.0.1:8003/bench 15 | ``` -------------------------------------------------------------------------------- /whoami.conf: -------------------------------------------------------------------------------- 1 | upstream whoami { 2 | server whoami-1:80; 3 | server whoami-2:80; 4 | server whoami-3:80; 5 | server whoami-4:80; 6 | keepalive 300; 7 | } 8 | 9 | server { 10 | listen 8001; 11 | server_name benchmark.whoami; 12 | access_log off; 13 | error_log /dev/null crit; 14 | 15 | location / { 16 | proxy_pass http://whoami; 17 | proxy_http_version 1.1; 18 | proxy_set_header Connection ""; 19 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 20 | proxy_set_header X-Forwarded-Host $host; 21 | proxy_set_header X-Forwarded-Port 80; 22 | proxy_set_header X-Forwarded-Proto $scheme; 23 | proxy_set_header X-Forwarded-Server $server_addr; 24 | proxy_set_header X-Real-IP $remote_addr; 25 | } 26 | } -------------------------------------------------------------------------------- /nginx.conf: -------------------------------------------------------------------------------- 1 | user nginx; 2 | worker_processes auto; 3 | worker_rlimit_nofile 200000; 4 | pid /var/run/nginx.pid; 5 | 6 | events { 7 | worker_connections 10000; 8 | use epoll; 9 | multi_accept on; 10 | } 11 | 12 | http { 13 | sendfile on; 14 | tcp_nopush on; 15 | tcp_nodelay on; 16 | keepalive_timeout 300; 17 | keepalive_requests 10000; 18 | types_hash_max_size 2048; 19 | 20 | open_file_cache max=200000 inactive=300s; 21 | open_file_cache_valid 300s; 22 | open_file_cache_min_uses 2; 23 | open_file_cache_errors on; 24 | 25 | server_tokens off; 26 | dav_methods off; 27 | 28 | include /etc/nginx/mime.types; 29 | default_type application/octet-stream; 30 | 31 | access_log /var/log/nginx/access.log combined; 32 | error_log /var/log/nginx/error.log warn; 33 | 34 | gzip off; 35 | gzip_vary off; 36 | 37 | include /etc/nginx/conf.d/*.conf; 38 | include /etc/nginx/sites-enabled/*.conf; 39 | } -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | 3 | services: 4 | traefik-v3.0: 5 | image: "traefik:v3.0" 6 | command: 7 | - "--api.insecure=true" 8 | - "--providers.docker=true" 9 | - "--providers.docker.exposedbydefault=false" 10 | - "--entrypoints.web.address=:8000" 11 | - "--serverstransport.maxidleconnsperhost=100000" 12 | ports: 13 | - "8000:8000" 14 | volumes: 15 | - "/var/run/docker.sock:/var/run/docker.sock:ro" 16 | 17 | traefik-v2.9: 18 | image: "traefik:v2.9" 19 | command: 20 | - "--api.insecure=true" 21 | - "--providers.docker=true" 22 | - "--providers.docker.exposedbydefault=false" 23 | - "--entrypoints.web.address=:8002" 24 | - "--serverstransport.maxidleconnsperhost=100000" 25 | ports: 26 | - "8002:8002" 27 | volumes: 28 | - "/var/run/docker.sock:/var/run/docker.sock:ro" 29 | 30 | nginx: 31 | image: nginx:alpine 32 | ports: 33 | - "8001:8001" 34 | volumes: 35 | - "./nginx.conf:/etc/nginx/nginx.conf:ro" 36 | - "./whoami.conf:/etc/nginx/conf.d/whoami.conf:ro" 37 | 38 | whoami-1: 39 | image: "containous/whoami" 40 | ports: 41 | - "8003:80" 42 | labels: 43 | - "traefik.enable=true" 44 | - "traefik.http.routers.go-benchmark.rule=Host(`benchmark.whoami`)" 45 | - "traefik.http.services.go-benchmark.loadbalancer.server.port=80" 46 | 47 | whoami-2: 48 | image: "containous/whoami" 49 | labels: 50 | - "traefik.enable=true" 51 | - "traefik.http.routers.go-benchmark.rule=Host(`benchmark.whoami`)" 52 | - "traefik.http.services.go-benchmark.loadbalancer.server.port=80" 53 | 54 | whoami-3: 55 | image: "containous/whoami" 56 | labels: 57 | - "traefik.enable=true" 58 | - "traefik.http.routers.go-benchmark.rule=Host(`benchmark.whoami`)" 59 | - "traefik.http.services.go-benchmark.loadbalancer.server.port=80" 60 | 61 | whoami-4: 62 | image: "containous/whoami" 63 | labels: 64 | - "traefik.enable=true" 65 | - "traefik.http.routers.go-benchmark.rule=Host(`benchmark.whoami`)" 66 | - "traefik.http.services.go-benchmark.loadbalancer.server.port=80" --------------------------------------------------------------------------------