服务器优化与防御:添加 Swap、调优 MySQL 缓冲池、Nginx 限流配置
当服务器面临内存不足(物理内存 1.7G)或攻击流量导致服务抖动时,通常需要从多个层面进行加固。以下操作涵盖内存优化与 Nginx 限流防御,均无需改动应用代码或数据。
一、添加 Swap 文件(推荐做法,不动现有分区)
当前服务器已有 1G swap(已用 226M),新增 2G swap 文件可将总 swap 提升至 3G,缓解攻击或高并发时的内存压力。
# 1. 在当前磁盘根目录建一个 2G 的 swap 文件(确保磁盘够) dd if=/dev/zero of=/www/swapfile bs=1M count=2048 status=progress # 2. 权限收紧(必须 600,否则 swapon 拒绝) chmod 600 /www/swapfile # 3. 格式化为 swap mkswap /www/swapfile # 4. 立即启用 swapon /www/swapfile # 5. 确认已生效 free -h swapon --show
让重启后自动生效(写入 fstab)
echo '/www/swapfile none swap sw 0 0' >> /etc/fstab mount -a && echo "fstab OK"
二、调整 MySQL InnoDB 缓冲池(64MB → 512MB)
InnoDB 缓冲池是 MySQL 内存占用的大头,适当调大可减少磁盘 IO,但需根据物理内存合理设置。本机物理内存 1.7G,建议缓冲池设为 512M(约物理内存的 30%)。
# 1. 查看当前配置 grep -rni "innodb_buffer_pool_size" /etc/my.cnf 2>/dev/null # 2. 备份配置文件 cp /etc/my.cnf /etc/my.cnf.bak-$(date +%Y%m%d-%H%M%S) # 3. 将缓冲池大小改为 512M sed -i 's/innodb_buffer_pool_size.*/innodb_buffer_pool_size = 512M/' /etc/my.cnf # 4. 确认修改结果 grep -i innodb_buffer_pool_size /etc/my.cnf # 5. 重启 MySQL 生效(建议低峰期操作) /etc/init.d/mysqld restart
也可通过宝塔面板 → 软件商店 → MySQL → 设置 → 性能调整 → 修改 “InnoDB 缓冲池大小” 并重启,效果相同。
三、Nginx 限流配置(限制请求频率)
在 Nginx 主配置中添加请求频率限制,防止攻击流量占满资源。
# 添加 limit_req_zone 配置(一条命令) sed -i 's#limit_conn_zone \$server_name zone=perserver:10m;#limit_conn_zone $server_name zone=perserver:10m;\n limit_req_zone $binary_remote_addr zone=adh_rl:10m rate=5r/s;#' /www/server/nginx/conf/nginx.conf # 立刻验证有没有加进去 grep -n limit_req_zone /www/server/nginx/conf/nginx.conf
验证成功标准:输出里有 limit_req_zone $binary_remote_addr zone=adh_rl:10m rate=5r/s; 这行 = 配置成功。
配置添加后,还需在具体 location 中启用 limit_req 指令才能生效。如需调整限流阈值,修改 rate=5r/s 中的数值即可。
四、注意事项
| 项目 | 注意事项 |
|---|---|
| Swap 文件路径 | 示例使用 /www/swapfile(宝塔机器 /www 通常盘大)。若放根目录,将所有路径改为 /swapfile。 |
| Swap 大小 | 现有 1G + 新增 2G = 3G 总 swap,1.7G 内存足够。不宜小于 1G,也不宜大于 4G。 |
| 已有 swap | swapon 支持多个 swap,新增文件不会与原有冲突。 |
| MySQL 缓冲池 | 建议设为物理内存的 30%~50%(本例 512M)。修改后需重启 MySQL,请选择低峰期操作。 |
| Nginx 限流 | 配置添加后,须在 location 中启用 limit_req 才能生效。调整 rate 值可改变限流阈值。 |
| 调整大小 | swap:先 swapoff → 删文件 → 重建 → swapon。MySQL:改配置后重启即可。 |
| 安全提醒 | 所有操作前建议备份配置文件。配合封禁攻击 IP 效果更佳,建议同时进行。 |
说明:
• 以上操作适用于 CentOS/Ubuntu 等 Linux 发行版,宝塔面板环境已验证。
• 三项配置均无需改动代码或数据,均为配置级改动。
• 若服务器同时遭受攻击,建议先阻断攻击 IP,再调整内存与限流参数。
• 具体数值请根据实际物理内存和磁盘容量调整。
