当前位置: 博客 > 网站建设

有了vps如何建站并配置SSL与安全防护的详细教程

2026年06月02日
VPS建站

本文面向有VPS(如Ubuntu 22.04/20.04)的用户,覆盖域名解析、环境安装(Nginx/Apache、PHP、数据库)、Let's Encrypt 免费 SSL、以及常见的安全防护(SSH加固、防火墙、Fail2ban、HTTPS强化、备份与监控)。每一步给出实际命令与示例配置,便于复制执行。

一、准备工作与域名解析

  1. 购买VPS并获得公网IP;推荐选择稳定提供商并开启备份快照功能。
  2. 注册域名并在域名提供商处添加A记录指向VPS公网IP(例如:www.example.com -> 1.2.3.4)。
  3. 确保能通过SSH连接:ssh root@1.2.3.4 。若不能,检查安全组/防火墙规则。

二、系统初始化与基本加固

以Ubuntu为例:

apt update && apt upgrade -y
# 创建非root用户并添加sudo
adduser deployuser
usermod -aG sudo deployuser
# 配置SSH密钥登录(本地生成:ssh-keygen),把公钥放到~/.ssh/authorized_keys

编辑 /etc/ssh/sshd_config 做基础加固:

# 推荐修改项:
PermitRootLogin no
PasswordAuthentication no
# 可选更改端口(如2222),但记得同步防火墙规则
Port 22

重启SSH:systemctl restart sshd

三、防火墙与入侵防护

使用ufw快速配置:

ufw allow OpenSSH
ufw allow 'Nginx Full'   # 放行80和443
ufw enable
ufw status verbose

安装并配置fail2ban防止暴力破解:

apt install fail2ban -y
# /etc/fail2ban/jail.local 示例(启用sshd)
[sshd]
enabled = true
bantime = 3600
maxretry = 5

四、安装Web环境(以Nginx + PHP-FPM + MariaDB为例)

apt install nginx mariadb-server php-fpm php-mysql -y
# 启动并设置开机自启(通常安装后自动启动)
systemctl enable --now nginx
systemctl enable --now mariadb

为数据库做基础安全:

mysql_secure_installation

五、配置网站(Nginx server block)

在 /var/www 创建站点目录并设置权限:

mkdir -p /var/www/example.com/html
chown -R www-data:www-data /var/www/example.com
chmod -R 755 /var/www/example.com

创建Nginx站点配置 /etc/nginx/sites-available/example.com:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }

    location ~ /\.ht { deny all; }
}

启用站点并测试:

ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

六、申请并部署Let's Encrypt SSL(Certbot)

安装certbot并自动为Nginx获取证书:

apt install certbot python3-certbot-nginx -y
certbot --nginx -d example.com -d www.example.com

certbot会自动修改Nginx并配置HTTP->HTTPS重定向。检查自动续期:

certbot renew --dry-run
# 系统会自动创建定时任务/systemd timer 处理续期

七、HTTPS与TLS安全强化

在Nginx的server区加入强制HTTPS与安全Header示例:

# HTTPS server block 示例补充
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header Referrer-Policy "no-referrer-when-downgrade";
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:...';  # 使用来自Mozilla的推荐套件
# 启用OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;

注意:套件请参考Mozilla SSL配置生成器根据兼容性选择。

八、应用层安全与防护建议

  • 文件与目录权限最小化:Web根目录不使用可写的全局权限,上传目录单独处理。
  • 使用WAF:可选安装ModSecurity(与Nginx配合需libmodsecurity)或使用云WAF如Cloudflare。
  • 限制请求速率:Nginx可配置limit_req、limit_conn保护。
  • 日志与审计:启用access.log与error.log,使用logrotate管理日志大小。

九、备份与监控

备份策略建议:

  • 数据库定期导出(mysqldump)并远程同步到对象存储或另一台备份服务器。
  • 使用rsync或restic做文件备份,保留多份快照并定期演练恢复。
  • 监控:使用Prometheus+Grafana或第三方监控(Pingdom、UptimeRobot)监测可用性与资源。

十、常见问题与检查项

  • 证书错误:确保域名解析正确且80端口未被拦截,certbot需要通过HTTP验证。
  • HTTPS混合内容:页面引用http资源会被浏览器拦截,检查并替换为https或相对路径。
  • 性能与并发:使用缓存(Nginx FastCGI缓存、Redis、CDN)减轻源站压力。
  • 安全事件响应:保留日志并定期查看异常,出现可疑访问立即封禁IP并检查系统完整性(AIDE)。

结语

本文概括了从VPS建站到SSL部署与常用安全防护的实操步骤。开始时优先完成系统更新、SSH密钥登录、ufw与fail2ban,再部署Web环境与Let’s Encrypt证书。后续持续做TLS强化、WAF/限速、备份与监控,定期复查配置与日志,能大大降低被攻击风险。如需针对某个环境(如CentOS、Apache、Docker、WordPress特定设置)给出更详尽的命令与配置模板,可告诉我你的系统与应用,我会提供一步步的定制化配置。