1.
总体架构与准备
在单台或多台台湾机房服务器(总带宽20Mbps)上部署多域名站群,先规划架构:使用反向代理(Nginx/HAProxy)+后端容器/虚拟主机(Docker/系统用户或轻量虚拟机)+流量控制(tc/HTB)+防护层(Cloudflare/iptables/fail2ban)。准备步骤:安装Nginx、Docker、tc、iptables、vnstat/iftop用于监控,申请每域名证书(Let's Encrypt)。
2.
域名与DNS配置
为每个域名创建独立A记录指向同一IP或使用负载均衡器。建议将DNS托管在支持API的服务(Cloudflare/DNSPod)便于自动化证书与流量控制。示例:在Cloudflare开启Proxy以缓解DDoS并缓存静态资源。若不使用CDN,保持TTL短以便应急切换。
3.
反向代理与虚拟主机部署(Nginx)
在Nginx上按域名配置server块,使用独立access_log和error_log便于流量统计。示例server配置关键项:server_name example.com; access_log /var/log/nginx/example.com.access.log; limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; 在对应server中启用 limit_req; upstream指向后端容器的不同端口。
4.
后端隔离:容器化或不同系统用户
推荐使用Docker或Podman为每个站点建立独立容器:docker run --name site1 -p 127.0.0.1:8001:80 -v /site1:/var/www ...。这样便于进程隔离、日志分离和限制资源(CPU、内存)。若不使用容器,至少为每站点创建独立Unix用户、独立document root和日志文件,使用open_basedir/PHP-FPM池隔离。
5.
带宽与连接数隔离:tc + cgroups
在Linux上用tc(Traffic Control)实现按端口或按veth接口限速。步骤示例:1) 为每个Docker容器创建veth并绑定到linux桥br0;2) 使用tc分配HTB class:tc qdisc add dev eth0 root handle 1: htb default 30; tc class add dev eth0 parent 1: classid 1:1 htb rate 20mbit; tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2mbit ceil 4mbit(为site1);3) 用 tc filter match ip dport 8001 flowid 1:10 将到后端端口流量映射到class。或者按源IP、按dst port限速。配合systemd-cgtop或cgroups v2限制容器带宽。
6.
每域名请求速率限制与连接控制
在Nginx层配置 limit_conn_zone $binary_remote_addr zone=addr:10m; limit_conn addr 10; limit_req_zone $binary_remote_addr zone=req:10m rate=1r/s; 在location中应用 limit_req zone=req burst=5 nodelay。对上传/下载大文件的站点设置单独server并提高限流策略,防止某域占满带宽。
7.
安全加固:iptables/nftables & fail2ban
配置基础防火墙,拒绝不必要端口:iptables -P INPUT DROP; iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT; iptables -A INPUT -p tcp --dport 22 -s 你的管理IP -j ACCEPT; iptables -A INPUT -p tcp --dport 80 -j ACCEPT; --dport 443 -j ACCEPT。使用fail2ban监控Nginx/PHP-FPM日志并自动封IP;针对暴力请求设置短期封禁规则。日志示例:/etc/fail2ban/jail.d/nginx.conf。
8.
证书管理与HTTPS强制
为每个域独立申请Let's Encrypt证书:certbot certonly --webroot -w /site1 -d example.com。推荐使用自动renew:certbot renew --post-hook "systemctl reload nginx"。Nginx配置强制HTTPS、开启HSTS并只启用安全套件(TLS1.2/1.3),同时把OCSP stapling打开以提高性能。
9.
监控与告警
部署vnStat/iftop/ntopng监控实时流量,Filebeat或Promtail收集Nginx日志到ELK/Loki做请求分域统计。用Prometheus+Grafana监控接口带宽、容器网卡流量、连接数,设置阈值告警(如单域带宽超过5Mbps触发)。同时启用每日或每小时脚本统计access_log按域流量。
10.
应急策略与故障恢复
制定当某域流量突增时的应对:1) 在流量层使用tc临时下调该class带宽;2) 在Nginx层启用更严格limit_req或直接返回503;3) 临时将域解析切换到备用IP或启用Cloudflare保护;4) 自动化脚本:当监控检测到阈值时调用tc与iptables脚本进行限流和封禁。
11.
问:在20Mbps总带宽下如何公平分配给大量域名?
12.
答:采用HTB把总带宽划分为若干class,为重要站点分配最小保证带宽(rate)和最大上限(ceil),并把未使用带宽允许借用;其次在应用层结合Nginx限速(limit_req)与连接数限制,最后通过监控触发动态调节脚本,当某类站点异常时降低其class优先级。
13.
问:若遇到DDoS短时爆发,如何在本机快速缓解?
14.
答:首先在网络边界(若有)或Cloudflare启用“Under Attack”模式;在服务器上用iptables按速率限制新连接(-m connlimit/limit),并用fail2ban封高频IP;短期使用tc把异常端口带宽降到很低并对Nginx启用更严格的limit_req,必要时临时返回503或把流量引到流量清洗服务。
15.
问:如何保证多域名下证书与日志隔离便于审计?
16.
答:为每个域配置独立webroot与独立certbot证书路径,Nginx使用各自access_log和error_log,容器化部署可让日志自然隔离。审计时可以基于域名日志生成流量报告与安全事件,对高危域名单独启用更严格WAF规则并存档证据文件。
来源:台湾站群20m带宽与多域名部署的流量隔离和安全设置实践