Nginx配置SSL证书启用HTTPS教程


为网站启用HTTPS是当前的基本要求,不仅能加密数据传输保护用户隐私,还能提升搜索引擎排名。本文介绍在搬瓦工VPS的Nginx上配置SSL证书的完整流程,包括使用certbot自动申请免费证书和手动安装商业证书两种方式。

前提条件

方式一:Certbot自动申请Let's Encrypt证书

Certbot是Let's Encrypt官方推荐的证书管理工具,可自动申请和配置SSL证书。

安装Certbot:

# Debian/Ubuntu
sudo apt update
sudo apt install certbot python3-certbot-nginx -y

# CentOS/AlmaLinux
sudo yum install epel-release -y
sudo yum install certbot python3-certbot-nginx -y

申请并自动配置证书:

sudo certbot --nginx -d example.com -d www.example.com

Certbot会自动完成以下操作:向Let's Encrypt申请证书、将证书文件保存到 /etc/letsencrypt/live/example.com/、修改Nginx配置文件添加SSL相关指令、设置HTTP到HTTPS的自动跳转。

按照提示输入邮箱地址(用于证书到期通知),同意服务条款,选择是否将HTTP重定向到HTTPS(建议选择重定向)。

方式二:手动安装SSL证书

如果使用商业证书或需要手动控制配置,可以按以下步骤操作。

上传证书文件:

# 创建证书存放目录
sudo mkdir -p /etc/nginx/ssl/example.com

# 将证书文件上传到服务器
# fullchain.pem - 完整证书链(包含中间证书)
# privkey.pem - 私钥文件

配置Nginx启用SSL:

server {
    listen 80;
    server_name example.com www.example.com;
    # HTTP自动跳转HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    # 证书文件路径
    ssl_certificate /etc/nginx/ssl/example.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/example.com/privkey.pem;

    # SSL协议和加密套件
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;

    # SSL会话缓存
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

HTTPS安全优化

基础SSL配置完成后,可以进一步优化安全性:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # 仅启用TLS 1.2和1.3
    ssl_protocols TLSv1.2 TLSv1.3;

    # HSTS - 强制浏览器使用HTTPS(开启后建议长期维护证书)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    # OCSP Stapling - 加速证书验证
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # DH参数(增强前向保密)
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;

    # 安全响应头
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-XSS-Protection "1; mode=block";
}

生成DH参数文件(首次运行需要几分钟):

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

反向代理的SSL配置

如果Nginx作为反向代理,SSL终端在Nginx处理,后端应用无需配置HTTPS:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

后端应用通过 X-Forwarded-Proto 头判断原始请求是否为HTTPS,避免在应用层面重复处理SSL。

验证SSL配置

配置完成后,检查Nginx配置并重新加载:

# 检查配置语法
sudo nginx -t

# 重新加载
sudo nginx -s reload

使用以下方式验证SSL是否生效:

常见问题

Tip: 证书自动续期配置请参考 Let's Encrypt自动续期教程。更多教程请查看新手教程
关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工 BandwagonHost 的优惠信息、使用教程和方案对比,方便中文用户选购和使用。

新手必读
搬瓦工优惠码

当前最大折扣优惠码:

NODESEEK2026(优惠 6.77%)

在购买方案时填入优惠码即可自动抵扣。详见 优惠码使用教程