插件窝 干货文章 Nginx怎么把http升级到https

Nginx怎么把http升级到https

Nginx yourdomain SSL HTTPS 552    来源:    2025-04-21

将Nginx从HTTP升级到HTTPS的完整指南

要将Nginx从HTTP升级到HTTPS,您需要完成以下几个主要步骤:

1. 获取SSL证书

首先,您需要获取有效的SSL证书。有以下几种选择:

免费证书选项

  • Let's Encrypt (推荐):使用Certbot工具自动获取和续期 sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

商业证书

  • 从DigiCert、GlobalSign等商业CA购买

2. 配置Nginx支持HTTPS

编辑Nginx配置文件(通常在/etc/nginx/sites-available/yourdomain.conf):

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

    ssl_certificate /path/to/your/certificate.crt;
    ssl_certificate_key /path/to/your/private.key;

    # 推荐的安全配置
    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:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 其他配置...
    root /var/www/html;
    index index.html index.htm;

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

3. 设置HTTP重定向到HTTPS

添加或修改80端口的server块,将所有HTTP请求重定向到HTTPS:

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$server_name$request_uri;
}

4. 测试并重新加载Nginx配置

# 测试配置是否正确
sudo nginx -t

# 重新加载配置
sudo systemctl reload nginx

5. 可选优化

启用HSTS (HTTP Strict Transport Security)

在443端口的server块中添加:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

OCSP Stapling

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/full_chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

6. 验证HTTPS设置

使用以下工具验证您的HTTPS配置: - SSL Labs测试 - 浏览器检查证书有效性 - 使用curl测试重定向: bash curl -I http://yourdomain.com

注意事项

  1. 确保防火墙允许443端口流量
  2. 定期更新SSL证书(Let's Encrypt证书每90天过期)
  3. 考虑设置自动续期(对于Let's Encrypt): bash sudo certbot renew --dry-run

完成以上步骤后,您的网站现在应该已完全从HTTP迁移到HTTPS,提供加密的安全连接。