编辑模式 · 点击文字即可修改 · Ctrl+S 导出 再次按 E 或点击左上角退出
模块 7.3 · 全栈部署

域名与 HTTPS

给网站一个名字,再上一把锁

先后顺序

先有域名,再上 HTTPS

HTTPS
地址栏不再标"不安全"
需要
证书
证明对面就是这个域名
签给
域名
example.com

所以要倒着来:先买域名,再申请证书,最后上 HTTPS

从右往左读

拆开一个域名

www三级域名 / 子域名不用买,随便加 . example二级域名我们买的就是这一截 . com顶级域名(TLD).com · .net · .cn · .jp … .还有个根平时都省略不写,不用管它
按层级
example.com = 二级域名
www.example.com = 三级域名
国内常见叫法
example.com = 主域名
www.example.com = 二级域名
12345
还有这几种

长得不太一样的域名

example.com.cn
两截后缀
.com.cn 当成一个整体;
.gov.cn / .edu.cn 只有政府、教育机构能注册
example.中国
中文顶级域名
.中国 / .公司 / .我爱你
李勃老师.com
中文的名字
后缀还是 .com,买的那一截是中文
123
Punycode

中文域名的真名

李勃老师.com→xn--ygr25xpohxwz.com
example.中国→example.xn--fiqs8s

DNS 只认英文字母、数字和连字符;xn-- 是转写之后的记号

历史遗留

为什么有的网址带 www

今天:一台服务器全包了
www
网站
看着眼熟
ftp
文件传输
mail
邮件
在 DNS 眼里,example.com 和 www.example.com 是两个完全不同的名字
12
买一个属于自己的域名

就四步

1
搜名字
看各个后缀的价格、有没有被注册
短、好记、别撞商标
2
挑后缀
常见的几十块一年
下单前看一眼续费价
3
下单付款
按年付费
一次可以买好几年
4
实名认证
照控制台提示上传证件
快的当天,慢的几个工作日
没做实名的域名用不了,也没法备案
ICP 备案

看服务器在哪儿,不看域名在哪儿买

example.com
域名
阿里云买的
必须备案备案通过前无法访问
不需要备案
中国大陆服务器
北京 · 上海 · 杭州 · 广州 …
腾讯云租的
香港 / 海外服务器
配好解析当天就能用
123
域名解析

在 DNS 登记一条记录

playharder.online
域名
DNS
登记:这个名字指向谁
解析目标
一台服务器(IP)
另一个域名
一段文本
记录类型登记的是什么
A名字 → IPv4 地址我们要用的就是它
AAAA名字 → IPv6 地址
CNAME名字 → 另一个名字(别名)
MX发给这个域名的邮件,交给哪台服务器
TXT一段任意文本,常用来证明"这个域名是我的"
NS这个域名归哪几台 DNS 服务器管
123
动手解析

两个名字,两条 A 记录

playharder.online
www.playharder.online
服务器 IP
zero-to-tech
记录类型主机记录记录值这一条管的是
A@服务器 IPplayharder.online
Awww服务器 IPwww.playharder.online
1
Nginx

按 Host 找 server 块

Host: playharder.online
Host: www.playharder.online
Host: 182.254.229.21
DNS
服务器
Nginx · :80
server {
server_name site-a.com;
listen 80;
server {
server_name site-b.com;
listen 80;
server {
server_name playharder.online www.playharder.online;
listen 80;
server {
server_name _;
listen 80 default_server;
来者不拒
1234
sites-available · sites-enabled

一个网站,一个配置文件

sites-available/草稿夹
sites-enabled/生效夹 · Nginx 只读这里
default
default
playharder.online
ln -s
playharder.online
1
认领名字之后

对上名字的走自己的块,对不上的走兜底

Host: playharder.online
Host: www.playharder.online
Host: 182.254.229.21
DNS
服务器 · Nginx :80
sites-available/playharder.online
server_name playharder.online www.playharder.online;
listen 80;
名字对上了
sites-available/default
listen 80 default_server;
server_name _;
return 404;
404
12
流量劫持

明文,沿途谁都能改

http://一个很正规的网站
×注册立送88元 全场一元抢网站自己没放这个
运营商设备
路由器 · 机房 …
在这里被塞进去
网站服务器
1
HTTPS

它解决三件事

HTTPS = HTTP + 加密层
加密
内容在路上是密文
沿途看不懂
防篡改
内容被改了
会立刻被发现
身份
证书证明:对面确实就是这个域名
证书由浏览器信任的机构签发
123
curl -v · * 开头的那几行

握手

* Connected to xn--ygr25xpohxwz.com (…) port 443
* (OUT) TLS handshake, Client hello
* (IN)  TLS handshake, Server hello
* (IN)  TLS handshake, Certificate
* (IN)  TLS handshake, CERT verify
* (IN)  TLS handshake, Finished
* (OUT) TLS handshake, Finished
* SSL connection using TLSv1.3 / …
> GET / HTTP/1.1
走的是 HTTPS 的那扇门
打个招呼,商定这次怎么加密
服务器把证书发过来
证明这张证书是它的
加密连接建好了
12345
要握手,Nginx 得有两份文件

证书和私钥

浏览器 / curl
访客
Certificate · 把证书发给访客
CERT verify · 用私钥对这次握手当场签名
服务器
Nginx · :443
fullchain.pem
证书 · 公开
privkey.pem
私钥 · 永不离开服务器
发出去的只是签名,私钥本身不出门
12
CA · 证书颁发机构

知名的 CA

类别代表特点
商业 CADigiCert
CFCA(中国金融认证中心)
GlobalSign
收费
除了验证域名,还能核实公司身份
免费、自动化Let's Encrypt
ZeroSSL
Google Trust Services
免费
只验证域名,申请、续期全靠程序自动完成
手工做,要几步

上 HTTPS 的完整工序

1生成私钥 privkey.pem
2写证书申请,交给 Let's Encrypt
3放好指定的东西,等它从 80 端口来取
4领回证书 fullchain.pem
5改 Nginx:监听 443、写上两份文件的路径、80 跳转 https
6检查配置,reload Nginx
790 天内,把 2–6 再做一遍——之后每一次都是
certbot
一条命令搞定
certbot:定时任务
123
状态码家族

补齐最后一个:3xx

2xx
成功
200 OK
新
3xx
重定向
内容搬家了,去新地址
301 · Location: https://…
4xx
请求方的问题
404 · 422
5xx
服务方的问题
500
cookie 的口子

第一趟 http,纸条已经出门了

浏览器
Secure
Chrome 会自己先升级成 https
但不是每个浏览器都会
http://playharder.onlineCookie: session_id明文
301 · Location: https://…
https://playharder.onlineCookie: session_id加密
Nginx
纸条已经在路上被看过了 加上 Secure:走 HTTP,浏览器就当没有它
12
cookie 的属性

一张纸条,三重约束

属性挡的是谁
HttpOnly页面里的 JS——纸条它读不到
Secure明文的路——没加密就不发
SameSite别的站点——不是从我这儿发起的请求,别乱带

Max-Age 管的是有效期,不在这一组

重要里程碑

这条链路,每一格都是我们自己搭的

域名
→
DNS
登记的 A 记录
→
服务器 IP
→
443
证书
→
Nginx
→
静态页面
FastAPI
→
SQLite
→
原路返回

从 2.4 租下第一台服务器,到这一刻——重要的里程碑

有人来过吗?

下一节见

模块 7.4 · 看懂流量