ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Manjaro+Caddy高并发Web服务器配置与优化指南

Manjaro+Caddy高并发Web服务器配置与优化指南

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 性能调优技巧

  1. 连接池优化:
export GOMAXPROCS=$(nproc) ulimit -n 100000
  1. 日志异步写入:
log { output file /var/log/caddy/access.log { roll_size 100MB roll_keep 5 } format json }
  1. 启用HTTP/3:
:443 { protocols h2 h3 servers { protocol { experimental_http3 } } }

4. 安全加固方案

4.1 基础防护措施

  1. 限制敏感目录访问:
@forbidden { path /wp-admin/* path /.git/* } respond @forbidden 403
  1. 动态黑名单配置:
sudo pacman -S fail2ban # /etc/fail2ban/jail.d/caddy.conf [caddy-botsearch] enabled = true port = http,https

4.2 高级安全策略

  1. 零信任架构实现:
@internal { remote_ip 192.168.1.0/24 } route { reverse_proxy @internal http://backend:8080 { header_up X-Real-IP {remote_host} } respond 403 }
  1. 证书钉扎配置:
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. 进阶优化建议

  1. 边缘缓存配置:
header Cache-Control "public, max-age=604800" handle /static/* { root * /srv/cache file_server }
  1. 地理位置路由:
yay -S mmdb-bin
@eu_users { not remote_ip 192.168.0.0/16 remote_ip /etc/caddy/GeoLite2-Country.mmdb { eu_countries } }
  1. 灰度发布方案:
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
返回列表