← 返回首页

VPS配置避坑指南

VPS 配置避坑SSHUFWDocker防火墙Ubuntu 开发环境配置避坑

问题一:SSH端口改了却忘更新防火墙

买好VPS,第一件事就是改SSH端口(22端口太容易被扫)。我改成2222,重启sshd,愉快地断开连接——然后发现:再也无法连接了

通过VPS控制台的VNC/console连接,执行:

sudo ufw allow 2222/tcp
sudo systemctl restart sshd

**根因**:Ubuntu 24.04默认启用UFWsudo 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规则,但如果UFWDocker之后启动,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)明确说明UFWDocker的兼容性问题,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:

VPS配置避坑指南
技术标签: vps, ssh
VPS Configuration Pitfalls Guide
技术标签: vps, ssh
VPS Configuration Pitfalls Guide
技术标签: vps, ssh
🖥️ Best VPS Servers
查看推荐 →