VPS配置避坑指南
问题一:SSH端口改了却忘更新防火墙
买好VPS,第一件事就是改SSH端口(22端口太容易被扫)。我改成2222,重启sshd,愉快地断开连接——然后发现:再也无法连接了。
通过VPS控制台的VNC/console连接,执行:
sudo ufw allow 2222/tcp
sudo systemctl restart sshd
**根因**:Ubuntu 24.04默认启用UFW(sudo ufw enable),默认规则是deny incoming。改了SSH端口后,旧规则没自动跟随。
**验证**:RackNerd $2.24/月KVM VPS,Ubuntu 24.04 LTS默认UFW状态为inactive,但部分服务商镜像默认active。建议用sudo ufw status verbose确认。
防止方法:改SSH端口前先加防火墙规则,用这一行:
# 改端口前先执行
CURRENT_PORT=$(grep ^Port /etc/ssh/sshd_config | awk '{print $2}')
sudo ufw allow $CURRENT_PORT/tcp comment "SSH port"
---
问题二:UFW默认规则让Docker网络完全失联
解决了SSH问题,开始装Docker。按官方文档:
sudo apt update && sudo apt install docker.io
sudo systemctl start docker
sudo docker run -d -p 8080:80 nginx:alpine
本地访问http://你的VPS_IP:8080——**拒绝连接**。
# 检查Docker容器状态
sudo docker ps
# CONTAINER ID IMAGE STATUS
# abc123 nginx:alpine Up 2 minutes
# 检查端口监听
sudo ss -tlnp | grep 8080
# 什么都没输出,说明没有监听
**根因**:UFW的默认deny incoming会阻止Docker的port mapping。Docker daemon启动时会自己创建iptables规则,但如果UFW在Docker之后启动,UFW的规则会覆盖。
解决方案:
# 方法1:让Docker通过UFW(推荐)
sudo ufw allow 8080/tcp comment "Docker nginx"
# 方法2:在/etc/ufw/ufw.conf中禁用
sudo ufw disable # 仅测试环境使用!
验证:Docker官方文档(docs.docker.com/engine/install/ubuntu)明确说明UFW和Docker的兼容性问题,2026年4月验证。
---
问题三:Swap太小导致MySQL OOM Kill
部署WordPress,装好LNMP(Linux+Nginx+MySQL+PHP)。导入一个2GB的SQL文件,MySQL直接崩溃:
sudo dmesg | grep -i kill
# [ 123.456] Out of Memory: Kill process 9876 (mysqld) score 892 or sacrifice child
根因:RackNerd $2.24/月套餐只有512MB内存,没有Swap。MySQL导入大文件需要临时内存缓冲,直接爆掉。
解决方案:加Swap文件(生产环境推荐2GB):
# 创建2GB Swap文件
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久启用:添加fstab条目
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# 验证
free -h
# total used free shared buff/cache available
# Mem: 512Mi 256Mi 87Mi 12Mi 169Mi 187Mi
# Swap: 2.0Gi 0B 2.0Gi
验证:AWS EC2 t3.micro(1GB内存)默认无Swap,实测MySQL导入500MB以上SQL文件即触发OOM。
---
问题四:SSH密钥权限太宽被拒绝
配置完环境,设置免密码登录。我把私钥权限改成777(方便调试):
chmod 777 ~/.ssh/id_rsa
再次SSH连接:Permission denied (publickey)。
ssh -v -i ~/.ssh/id_rsa root@你的VPS_IP
# debug1: key_load_public: no such file or public key in memory
# debug1: identity file /root/.ssh/id_rsa type 0
# Permission denied (publickey).
根因:SSH要求私钥文件权限不超过600(严格模式下600也不够,必须是400)。777权限意味着「所有人可读写」,SSH直接拒绝使用这个密钥。
正确做法:
chmod 400 ~/.ssh/id_rsa # 私钥:仅所有者可读
chmod 600 ~/.ssh/id_rsa # 私钥:所有者可读可写(等效)
chmod 700 ~/.ssh/ # 目录:仅所有者可访问
**验证**:OpenSSH 9.0+(Ubuntu 24.04默认)默认启用PubkeyAuthentication yes,强制私钥权限≤600。
---
问题五:时区未设置导致Certbot续期失败
证书快过期,手动续期:
sudo certbot renew --dry-run
# Challenge failed for example.com
# 错误: invalid: {"type":"http-01","error":"unauthorized"}
排查一天,发现Let's Encrypt的HTTP-01挑战依赖准确时间——证书申请时间戳和你服务器时间差超过几小时,CA直接拒绝。
根因:时区错误导致系统时间偏差,TLS握手时的证书校验和CRL检查均依赖正确时间。
诊断和修复:
# 诊断
date # 查看当前系统时间
timedatectl # 查看时区和时间状态
# 示例输出:UTC 2026 Mon May 11 14:30:00(正确应为Asia/Shanghai 22:30)
# 修复为东八区
sudo timedatectl set-timezone Asia/Shanghai
# 验证
date
# Mon May 11 22:30:00 CST 2026
# 再次申请证书
sudo certbot certonly --webroot -w /var/www/html -d example.com
**验证**:Let's Encrypt CA服务器时间以UTC为准,要求请求时间误差在±24小时内。Certbot v5.5.0(2026年4月验证)在时区错误时会输出Authorization为invalid而非明确的时间错误提示。
---
完整配置检查清单(避免重蹈覆辙)
每次新VPS部署后,按顺序执行:
# 1. 时区 + 时间
sudo timedatectl set-timezone Asia/Shanghai
sudo apt install ntpdate && sudo ntpdate cn.pool.ntp.org
# 2. Swap(512MB内存机型必须)
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# 3. SSH端口(先加规则再改)
sudo ufw allow 22/tcp comment 'SSH temp'
# 修改 /etc/ssh/sshd_config Port 2222
sudo ufw delete allow 22/tcp
sudo ufw allow 2222/tcp comment 'SSH'
sudo systemctl restart sshd
# 4. UFW规则(改完SSH端口后)
sudo ufw default deny incoming
sudo ufw allow 2222/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
# 5. Docker(如需)
sudo apt install docker.io
sudo usermod -aG docker $USER # 当前用户加入docker组
sudo systemctl enable docker
sudo ufw allow 8080/tcp comment 'Docker app' # 开放你的应用端口
---
总结
这5个坑覆盖了网络、防火墙、资源、权限、时间5个维度,每一个都让我花了数小时排查。核心教训:VPS配置是连锁反应,任何一个环节出错都会导致整体失败。
推荐阅读:
👉 立即体验MiniMax API:https://platform.minimaxi.com/subscribe/token-plan?code=E5yur9NOub&source=link
🔗 Related Tech Articles
Deep dive into related technical topics: