步骤一:确认业务流量类型(峰值突发还是稳定大流量)。步骤二:向厂商询问带宽计费方式(按95th、按QOS/峰值、固定带宽或非计量)。若有频繁短时爆发选“突发带宽+按95th限额”方案;若长期高带宽选择“专用带宽/不限流量包”。步骤三:索取测试IP,使用 iperf3 测试上下行带宽:sudo apt install iperf3;在远端运行 iperf3 -s,本地运行 iperf3 -c
选择东京或大阪的POP要看目标用户分布与ISP对接情况。优先选有多个上游(NTT、KDDI、SoftBank)和Anycast/多线的机房。要求提供商开放BGP或支持Anycast加速时,咨询是否可挂载自有IP段或是否支持流量镜像/黑洞路由(通常用于DDoS)。使用 mtr
步骤:注册CDN(Cloudflare/阿里/腾讯/其他日本CDN),把DNS指向CDN。配置缓存规则:对静态资源设置长缓存(Cache-Control:max-age=604800),对动态页面使用边缘缓存或带缓存键的页面缓存。示例Nginx反向代理缓存配置:在 http 块中加入 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:10m max_size=10g inactive=60m; 在 location 中使用 proxy_cache mycache; proxy_cache_key "$scheme$request_method$host$request_uri";
编辑 /etc/sysctl.conf 增加并应用(sudo sysctl -p):net.core.somaxconn=65535;net.core.netdev_max_backlog=250000;net.ipv4.tcp_tw_reuse=1;net.ipv4.tcp_fin_timeout=30;net.ipv4.ip_local_port_range=1024 65535;net.ipv4.tcp_max_syn_backlog=8192。Nginx 配置:worker_processes auto; worker_rlimit_nofile 200000; events { use epoll; worker_connections 65536; } http { keepalive_timeout 15; sendfile on; tcp_nopush on; tcp_nodelay on; }
Nginx 限流示例:limit_req_zone $binary_remote_addr zone=req_zone:10m rate=10r/s; 在 location 加入 limit_req zone=req_zone burst=20 nodelay; 限制并发连接:limit_conn_zone $binary_remote_addr zone=addr:10m; limit_conn addr 10; 对API接口按用户/IP设置不同策略。对长连接(WebSocket)监控并限制最大总连接数。结合 Redis 做分布式计数实现跨节点限流。
静态与半静态页面尽量走缓存(nginx proxy_cache 或 varnish)。数据库方面启用连接池(例如 PHP 使用 pgbouncer 或 PDO persistent,Java使用 HikariCP),限制最大连接数并合理配置缓存层(Redis/memcached)。示例:Redis 配置持久化与 maxmemory-policy 设置为 volatile-lru,避免内存溢出。对于高并发写场景,考虑消息队列(RabbitMQ/Kafka)做异步化。
部署前端负载均衡(HAProxy/LVS/NGINX)并使用 keepalived 做虚拟IP漂移。示例HAProxy简单配置:frontend http-in bind *:80 default_backend servers; backend servers balance roundrobin server s1 10.0.0.1:80 check; 配合自动化脚本或云API做横向扩容(检测CPU/响应时间阈值触发新实例并更新LB)。
向VPS提供商申请DDoS防护或清洗服务。服务器侧启用基本防护:安装 fail2ban 并配置 nginx/judge 日志规则;使用 ipset 快速封禁大批IP,例:ipset create blacklist hash:ip; iptables -I INPUT -m set --match-set blacklist src -j DROP。启用 SYN cookies(sysctl net.ipv4.tcp_syncookies=1)。当检测到大规模攻击,配合上游BGP黑洞或CDN“在边缘拦截”是最佳做法。使用 tc 做简单带宽限速:tc qdisc add dev eth0 root tbf rate 200mbit burst 32kbit latency 400ms。
部署 Prometheus + node_exporter + Grafana 或 netdata,监控带宽、连接数、队列、响应时间与错误率。设置告警:带宽使用率>85% 持续5分钟、连接数>阈值、5xx比例>2% 等。定期做压测(wrk/hey/ab)模拟真实并发并验证限流与扩容策略:wrk -t12 -c400 -d60s http://your.site/。演练包括:切换到备用机房、开启清洗、模拟缓存击穿恢复步骤。
答:第一步立即启用CDN或把流量导至已有CDN并开启“仅限缓存”的模式;第二步临时在源站启用更严格的限流(Nginx limit_req/limit_conn);第三步联系VPS供应商请求临时带宽提升或清洗服务,同时在网络层使用 ipset/iptables 快速封禁恶意IP。
答:必须调整 sysctl(somaxconn、netdev_max_backlog、tcp_max_syn_backlog、ip_local_port_range、tcp_fin_timeout、tcp_tw_reuse)并立即应用 sudo sysctl -p;Nginx 层设置 worker_processes auto、worker_connections 高至数万、epoll 事件模型、keepalive_timeout 合理缩短、开启 sendfile 与 tcp_nodelay。落地步骤:1)备份原配置;2)修改 /etc/sysctl.conf 和 /etc/nginx/nginx.conf;3)重载 sysctl 与重启 Nginx;4)用 ab/wrk 复测并观察 netstat/ss 连接数。
答:单台VPS难以完全抵御大规模DDoS,最优策略是多层防护:使用CDN/边缘清洗把攻击在边缘吸收;在VPS端做好限流、SYN cookie、ipset快速封禁、fail2ban 和应用级验证(如验证码、JS挑战)。准备好应急流程(切换到清洗、提升带宽、启用黑洞由上游协助)并与提供商保持联系。