这是「把自己部署到互联网上」系列的第 26 篇。
上一篇复盘了部署架构:
- Docker 管项目运行
Docker Compose管项目内部服务- 全局
Nginx容器 管公网入口 - 数据库不暴露公网
- 多个项目通过统一入口对外访问
到这里,服务器安全和部署架构都有了基本方案。
但个人博客还不能算真正准备好上线,因为还差一个关键环节:HTTPS。
HTTPS(超文本传输安全协议)
从技术上说,HTTP也能访问网站。
输入域名,浏览器能打开页面,文章能看,接口能请求,似乎已经够了。
问题是,如果这个网站准备长期公开访问,尤其以后还会承载博客、官网、作品站和后台管理,HTTPS 就不该被当成上线后的优化项,而应该是正式上线的一部分。
我以前也觉得 HTTPS 主要是大网站、支付网站、登录系统才需要。
个人博客只是写文章,不登录、不付款、不存用户信息,好像 HTTP 也能用。
但真正准备把博客当成长期技术阵地后,我的观念有了一点变化(有种 “知道的越多,不知道的越多”的感觉)。
HTTPS不只解决加密,还关系到连接可信、浏览器提示、后台登录、现代 Web 能力、搜索和分享体验。
HTTP 最大的问题是明文传输
浏览器和服务器之间传输的内容如果不加密,中间链路就存在被窥探、篡改或劫持的风险。
有人可能会说,博客文章不就是给人看的么,也没什么敏感内容。
但访问行为本身也是信息:用户访问了哪个页面,请求了哪些资源,是否提交表单,后台是否登录,这些都可能暴露在链路中。
更关键的是,HTTP 内容可能被中间环节篡改,比如插入广告、替换资源、劫持跳转。
对博客来说,文章内容、代码示例和下载链接都属于表达的一部分。
如果访问过程不可信,读者看到的内容就可能会脱离你的控制。
HTTPS 的影响
HTTPS 的意义,是在浏览器和服务器之间建立加密、完整、可验证的连接。
它不能解决所有安全问题,也不能替代服务器加固、数据库权限和应用安全,
但它解决了一个基础问题:访问者和网站之间的连接应该可信。
现代浏览器也已经默认 HTTPS。
如果网站仍然使用 HTTP,地址栏可能显示“不安全”。
哪怕只是个人博客,这个提示也会给人看起来不安全的感觉,影响第一印象。
大多数读者不会细分“只是没有 TLS”还是“网站真的危险”,他们只会看到浏览器在提醒不安全。
这对个人网站会很吃亏。你花时间做服务器、域名、备案、Docker、Nginx,最后用户打开页面先看到“不安全”,基础体验就被打断了。HTTPS 至少能避免这种低级损耗。
对有登录和后台的网站,HTTPS 更是前置条件
很多博客系统都有管理后台,即使不开放用户注册,管理员也要登录发文。
如果后台登录走HTTP,用户名、密码、Cookie、Token 都可能在明文链路中暴露。
只要网站有任何登录、提交或管理操作,就应该一开始配好 HTTPS,而不是等访问量上来再补。
HTTPS 还影响很多现代 Web 能力
部分浏览器 API 要求安全上下文,例如 Service Worker、PWA、剪贴板、定位、通知、摄像头和麦克风等。
博客初期未必用得上,但个人官网、作品站或交互项目以后可能会用。
并且很多第三方服务也默认要求 HTTPS 回调,比如 OAuth、Webhook、支付和 API 回调。
提前把 HTTPS 作为基础设施,后面扩展会少很多改造成本。
搜索和分享也会受到影响
HTTPS 不是 SEO 的全部,内容质量、结构、速度、外链和更新频率都更重要。
但 HTTPS 至少是一个基础项。文章被分享到微信、社群、GitHub、简历和作品站时,链接最好一开始就是 HTTPS。否则后面从 HTTP迁移到 HTTPS,还要处理跳转、历史链接、缓存和混合内容问题。
这里也需要区分一下
SSL和TLS。日常大家常说
SSL证书,但现代HTTPS使用的主要是TLS,只是很多平台仍沿用“SSL 证书”这个叫法。证书的作用可以简单理解为两点:
证明当前域名和证书匹配;
配合加密协商,让浏览器和服务器建立安全连接。
小结:
证书不是万能防护。
- 它不能保证服务器没有漏洞
- 也不能保证代码没有 Bug
- 更不能替代数据库权限控制。
- 但没有证书,浏览器就无法正常建立可信的 HTTPS 连接
HTTPS 也不是只在 Nginx 里写两行配置就结束。
实际维护时还要考虑:
- 证书从哪里申请
- 文件放在哪里
- 私钥如何保护
- 多个域名怎么管理
- 什么时候过期
- 续期后怎么让 Nginx 生效
- HTTP 是否自动跳转 HTTPS
- 页面是否存在混合内容
- 备份时是否包含证书目录
结合前面的全局 Nginx 方案,我的 HTTPS 规划方案如下:
- 正式访问都走
HTTPS HTTP自动跳转到HTTPS- 证书集中放在全局
Nginx的证书目录 - 每次改证书或站点配置先执行
nginx -t,通过后再reload - 续期流程要清楚
- 多个子域名要提前规划
- 页面资源不能混用
HTTP
如果网站一开始就配 HTTPS,后面最省事。
若先用 HTTP 上线,再迁移 HTTPS,就要处理旧链接跳转、资源地址、第三方回调、浏览器缓存和 Nginx 配置顺序。
这对个人博客这种长期内容站来说,正式上线前配好 HTTPS 更稳。
因为它不只是加密。它关系到访问安全、浏览器提示、后台登录、现代 Web 能力、SEO、分享链接和公开入口的可信度。
对我的博客来说,HTTPS 是上线前必须补齐的基础设施(不强制这一步,还是建议直接做上,也不算复杂)。
现在全局 Nginx 已经作为统一入口跑起来了,下一步就是给这个入口配上可信连接。
下一篇进入实操:SSL 证书申请、下载、部署完整流程。从证书拿到手,到放进 Nginx,再到让网站真正通过 HTTPS 访问。
本文由 楸木 原创,转载请注明出处。