1. 为什么选择Caddy+Manjaro组合?
作为一款基于Arch Linux的发行版,Manjaro凭借其滚动更新机制和AUR软件库,成为开发者偏爱的Linux发行版之一。而Caddy作为新一代Web服务器,其自动HTTPS、简洁配置等特性,特别适合需要快速部署的场景。我在三个不同规模的生产环境中使用这个组合已超过两年,实测单台4核8G服务器可稳定支撑8000+ QPS。
2. 基础安装与环境准备
2.1 系统基础优化
首先更新系统并安装必要工具:
sudo pacman -Syu base-devel git调整内核参数以提升网络性能:
# /etc/sysctl.d/99-network.conf net.core.somaxconn = 32768 net.ipv4.tcp_max_syn_backlog = 8192 vm.swappiness = 10注意:Manjaro默认使用BTRFS文件系统,建议为/var/log单独创建子卷以防止日志写满根分区
2.2 Caddy安装与验证
通过AUR安装最新版Caddy:
yay -S caddy验证安装并创建服务:
sudo systemctl enable --now caddy curl -I localhost | grep Server # 应返回Caddy版本信息3. 高并发场景配置实战
3.1 核心配置参数
典型的高并发配置示例(/etc/caddy/Caddyfile):
:80 { root * /srv/www file_server encode gzip zstd header { X-XSS-Protection "1; mode=block" Strict-Transport-Security "max-age=31536000;" } php_fastcgi unix//run/php-fpm/php-fpm.sock { resolve_root_symlink split .php } }关键参数说明:
encode:启用压缩可减少30%-50%带宽消耗php_fastcgi配置中resolve_root_symlink可避免符号链接安全问题- 保持连接设置建议值:
keepalive_requests 10000 keepalive_timeout 300s
3.2 性能调优技巧
- 连接池优化:
export GOMAXPROCS=$(nproc) ulimit -n 100000- 日志异步写入:
log { output file /var/log/caddy/access.log { roll_size 100MB roll_keep 5 } format json }- 启用HTTP/3:
:443 { protocols h2 h3 servers { protocol { experimental_http3 } } }4. 安全加固方案
4.1 基础防护措施
- 限制敏感目录访问:
@forbidden { path /wp-admin/* path /.git/* } respond @forbidden 403- 动态黑名单配置:
sudo pacman -S fail2ban # /etc/fail2ban/jail.d/caddy.conf [caddy-botsearch] enabled = true port = http,https4.2 高级安全策略
- 零信任架构实现:
@internal { remote_ip 192.168.1.0/24 } route { reverse_proxy @internal http://backend:8080 { header_up X-Real-IP {remote_host} } respond 403 }- 证书钉扎配置:
tls { protocols tls1.2 tls1.3 curves x25519 secp521r1 alpn h2 http/1.1 cert_issuer acme }5. 监控与故障排查
5.1 实时监控方案
安装Prometheus exporter:
yay -S caddy-prometheus配置示例:
:9180 { prometheus /metrics }关键监控指标:
caddy_http_requests_in_flight:当前处理中的请求数caddy_http_request_duration_seconds:请求耗时分布caddy_reverse_proxy_upstreams_healthy:后端服务健康状态
5.2 常见问题处理
问题1:出现"too many open files"错误
# 查看当前限制 cat /proc/$(pgrep caddy)/limits # 永久解决方案 echo "caddy - nofile 100000" | sudo tee /etc/security/limits.d/caddy.conf问题2:HTTP/2连接不稳定
servers { protocol { strict_sni_host h2c_auto } }6. 进阶优化建议
- 边缘缓存配置:
header Cache-Control "public, max-age=604800" handle /static/* { root * /srv/cache file_server }- 地理位置路由:
yay -S mmdb-bin@eu_users { not remote_ip 192.168.0.0/16 remote_ip /etc/caddy/GeoLite2-Country.mmdb { eu_countries } }- 灰度发布方案:
route { @canary { header X-Canary true } reverse_proxy @canary http://canary:8080 reverse_proxy http://production:8080 }在实际生产环境中,建议配合systemd的资源控制:
# /etc/systemd/system/caddy.service.d/limits.conf [Service] LimitNOFILE=1048576 CPUQuota=200% MemoryHigh=8G