设置HTTPS协议,议设核心就三件事:买证书、议设配服务器、议设做跳转。议设别被网上那些长篇教程吓住,议设实际操作起来,议设比你想的议设简单得多。
先说说证书。议设你当然可以去CA机构买,议设一年几百到几千不等,议设但个人站点或者测试环境,议设用Let's Encrypt的议设免费证书完全够用。我自己的议设博客就是这么干的,三年没花过一分钱。议设用Certbot这个工具,议设命令行敲几下,证书就自动申请并部署好了,连续期都是自动的。整个过程快的话,五分钟搞定。
拿到证书文件后,真正的活来了——配置服务器。以最常见的Nginx为例,你需要在配置文件的server块里加上两行:
listen 443 ssl; ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem;这段配置告诉Nginx:在443端口开启SSL,证书路径指过去。改完文件,执行
nginx -t检查语法,没问题就systemctl reload nginx。这时候你用https://你的域名访问,浏览器地址栏应该出现小锁了。但别急着收工。你想想,用户习惯输入
http://或者干脆不输协议,如果只开443端口,他们访问旧地址就会报错。所以得把80端口的HTTP请求强制跳转到HTTPS。在Nginx里加个server块:server { listen 80; server_name 你的域名; return 301 https://$host$request_uri; }这行配置的意思是:所有80端口的请求,直接返回301永久重定向,把用户带到HTTPS版本。你看,逻辑很清楚——旧地址别用了,都去新地址。
还有个细节容易忽略。如果你用了CDN或者负载均衡,要记得在Nginx里设置
X-Forwarded-Proto头,否则后端程序可能误判请求协议,导致混合内容警告——就是那种明明开了HTTPS,但页面里有些图片或脚本还在走HTTP,浏览器给你拦下来的情况。处理方式很简单,在location块里加一行:proxy_set_header X-Forwarded-Proto $scheme;配置完这些,用
curl -I https://你的域名看看返回头,确认状态码是200,再检查一下Strict-Transport-Security响应头有没有设置。这个头叫HSTS,作用是告诉浏览器:以后只能通过HTTPS访问我这个域名,连第一次的HTTP请求都省了。加上它,安全性才算完整。在server块里加:add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;我见过太多人卡在最后一步。证书配好了,HTTPS能访问了,但忘了改程序里的资源链接。后台代码里写死的
http://地址,页面加载时全被浏览器拦下来,用户看到的就是个乱七八糟的页面。你说冤不冤?所以改完服务器配置,记得全局搜一下代码里的http://,该换的相对路径就换成相对路径,该改成https://的就改掉。测试完一切正常,别忘了把80端口的跳转和HSTS都验证一遍。用Chrome的无痕模式访问旧地址,看它是否自动跳到HTTPS;再去开发者工具的Network面板里,确认所有请求都是绿色的HTTPS。
设置HTTPS不是一次性的活儿。证书会过期,配置会出错,浏览器策略也在变。但只要你掌握了上面这套流程,出了问题,看一眼日志,改一改配置,基本都能解决。毕竟,HTTPS只是个工具,别把它当成什么高深莫测的东西。
顶: 7踩: 411






评论专区