让网站走HTTPS只需三步:获取证书(如Let’s Encrypt或云厂商免费DV证书)、配置Nginx指向证书路径并启用SSL、设置80端口301跳转至HTTPS;全程无需改代码或买服务器,十几分钟即可完成。

想让网站走 HTTPS,其实就三件事:拿到证书、告诉 Nginx 哪里找它、让所有访问自动跳过来。不改代码、不买服务器,只要域名能解析、80 端口通,十几分钟就能跑起来。
选一个靠谱的免费证书
个人或小项目直接用 Let’s Encrypt,零成本、浏览器全信任、还能自动续期。国内用户也可以选腾讯云或阿里云的免费 DV 证书,后台点几下、加一条 TXT 记录,几分钟就签发好。
证书下载后你会拿到两个文件:
- .pem 或 .crt 文件:这是你的域名证书 + 中间证书拼在一起的完整链(叫 fullchain.pem 最稳妥)
- .key 文件:私钥,必须未加密,开头是 -----BEGIN PRIVATE KEY----- 或 -----BEGIN RSA PRIVATE KEY-----
把证书放对地方、设对权限
别扔在桌面或 home 目录下——Nginx 启动时可能读不到。统一放到 /etc/nginx/ssl/ 是最省心的做法:
- 创建目录:
sudo mkdir -p /etc/nginx/ssl - 上传证书和私钥,例如:
example.com.crt和example.com.key - 设权限:
sudo chmod 644 /etc/nginx/ssl/example.com.crt,sudo chmod 600 /etc/nginx/ssl/example.com.key
私钥权限必须是 600,否则 Nginx 会拒绝加载,报错 “permission denied”。
写一个能用的 HTTPS server 块
打开你的站点配置文件(比如 /etc/nginx/sites-available/default 或 /etc/nginx/conf.d/my-site.conf),加入以下内容:
- 监听 443 端口并启用 SSL:
listen 443 ssl http2; - 指定证书路径:
ssl_certificate /etc/nginx/ssl/example.com.crt; - 指定私钥路径:
ssl_certificate_key /etc/nginx/ssl/example.com.key; - 启用现代协议:
ssl_protocols TLSv1.2 TLSv1.3; - 加个 HSTS 头(可选但推荐):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
注意:ssl_certificate 必须指向包含完整证书链的文件(不是单个域名证书),否则 iOS 或部分安卓设备会提示不安全。
强制所有人走 HTTPS
单独再加一个监听 80 端口的 server 块,不做其他事,只做一件事:301 跳转。
server {listen 80;server_name example.com www.example.com;return 301 https://$server_name$request_uri;}
别在同一个 server 块里又 listen 80 又 listen 443 ssl,Nginx 会报错。也别用 rewrite,return 301 更快更干净。
配完执行 sudo nginx -t 检查语法,没问题就 sudo nginx -s reload 生效。打开浏览器访问 https://your-domain.com,看到锁图标,就成了。











