«

Nginx 配置 HTTPS 详解

时间:2026-10-7 07:10     作者:emer     分类: 无


Nginx 配置 HTTPS 详解

现在网站都要求上 HTTPS,Nginx 配置 HTTPS 是运维必备技能。

1. 申请 SSL 证书

免费证书推荐:

用 acme.sh 申请 Let's Encrypt:

# 安装 acme.sh
curl https://get.acme.sh | sh

# 申请证书
~/.acme.sh/acme.sh --issue -d www.example.com --webroot /www/wwwroot/example.com/

# 安装证书
~/.acme.sh/acme.sh --install-cert -d www.example.com \
  --key-file /www/server/ssl/private.key \
  --fullchain-file /www/server/ssl/cert.crt

2. Nginx 基础 HTTPS 配置

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

    # 证书文件
    ssl_certificate     /www/server/ssl/cert.crt;
    ssl_certificate_key /www/server/ssl/private.key;

    # SSL 优化
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    root /www/wwwroot/example.com;
    index index.html index.php;

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

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

3. HTTP 自动跳转 HTTPS

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

4. 优化 HTTPS 性能

开启 HTTP/2:

listen 443 ssl http2;

HSTS 强制 HTTPS:

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

开启 OCSP Stapling:

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 114.114.114.114 valid=300s;

5. 常见问题

1)证书不生效:

2)混合内容问题:

3)证书过期:

# acme.sh 自动安装了定时任务
crontab -l | grep acme

6. 检查配置

# 检查 Nginx 配置
nginx -t

# 重载配置
nginx -s reload

# 测试证书
curl -I https://www.example.com

总结

Nginx 配置 HTTPS 要点:

现在没有 HTTPS 的网站浏览器都标"不安全",赶紧给网站配上。

标签: Nginx HTTPS SSL 证书 配置