
现在大多数正式网站都会启用 HTTPS。对于使用 Nginx 的服务器来说配置流程并不复杂核心就是准备证书、配置 443、指定证书路径再把 HTTP 跳转到 HTTPS。下面用一个常见站点做完整示例。1. 准备 SSL 证书通常会拿到两个主要文件example.com.crt example.com.key有些证书提供的是fullchain.pem privkey.pem把证书放到服务器固定目录例如mkdir -p /etc/nginx/ssl假设最终路径是/etc/nginx/ssl/example.com.crt /etc/nginx/ssl/example.com.key私钥文件权限不要设置得过于宽松。可以执行chmod 600 /etc/nginx/ssl/example.com.key2. 先准备一个普通 HTTP 网站最基础的 Nginx 配置server { listen 80; server_name example.com www.example.com; root /var/www/example; index index.html; location / { try_files $uri $uri/ 404; } }先确认网站通过 HTTP 可以正常访问。修改配置后检查nginx -t确认没有错误syntax is ok test is successful然后重新加载systemctl reload nginx3. 配置 HTTPS增加一个监听 443 的serverserver { listen 443 ssl; server_name example.com www.example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; root /var/www/example; index index.html; location / { try_files $uri $uri/ 404; } }其中最关键的是ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key;一个是证书一个是私钥。路径写错或者文件权限有问题Nginx 都可能启动失败。4. HTTP 自动跳转 HTTPSHTTPS 能访问以后可以把 80 端口改成跳转server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; }这样用户访问http://example.com/test会自动跳转到https://example.com/test原来的访问路径和参数都会保留。5. HTTPS 反向代理如果后端是 Node.js、Java 或其他服务例如运行在127.0.0.1:3000可以这样配置server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; 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; } }请求流程就是浏览器 HTTPS ↓ Nginx 443 ↓ 127.0.0.1:3000SSL 由 Nginx 处理后端服务一般不需要自己配置 HTTPS。6. 修改完成后检查配置每次修改完都建议先执行nginx -t没有错误后systemctl reload nginx查看 Nginx 状态systemctl status nginx如果启动失败可以查看错误日志tail -n 100 /var/log/nginx/error.log7. HTTPS 无法访问怎么排查首先检查 443 是否监听ss -lntp | grep 443如果没有输出说明 Nginx 没有正常监听 HTTPS。然后检查防火墙ufw status如果使用其他防火墙也要确认 TCP 443 已经放行。再检查证书文件ls -l /etc/nginx/ssl/常见问题基本集中在证书路径错误 私钥路径错误 证书与私钥不匹配 443 端口没有开放 Nginx 配置没有 reload 域名没有正确解析到服务器一个完整配置示例实际项目中可以写成server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name example.com www.example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; root /var/www/example; index index.html; location / { try_files $uri $uri/ 404; } }配置 HTTPS 时最重要的是先确认三个东西域名解析正常 证书与私钥正确 服务器 443 端口可访问这三个条件满足以后Nginx 本身的配置反而比较简单。如果出现问题先执行nginx -t再检查 443 监听状态和 Nginx 错误日志通常很快就能找到原因。