惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tenable Blog
WordPress大学
WordPress大学
小众软件
小众软件
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
大猫的无限游戏
大猫的无限游戏
T
The Exploit Database - CXSecurity.com
Attack and Defense Labs
Attack and Defense Labs
Simon Willison's Weblog
Simon Willison's Weblog
C
CXSECURITY Database RSS Feed - CXSecurity.com
量子位
有赞技术团队
有赞技术团队
C
Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
F
Fortinet All Blogs
S
Schneier on Security
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
Stack Overflow Blog
Stack Overflow Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Spread Privacy
Spread Privacy
F
Full Disclosure
Scott Helme
Scott Helme
GbyAI
GbyAI
N
Netflix TechBlog - Medium
MyScale Blog
MyScale Blog
Cloudbric
Cloudbric
云风的 BLOG
云风的 BLOG
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
Hacker News - Newest:
Hacker News - Newest: "LLM"
Security Latest
Security Latest
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
L
Lohrmann on Cybersecurity
PCI Perspectives
PCI Perspectives
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
D
Docker
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Secure Thoughts
C
Check Point Blog

东东's Blog

Memos: MacOS 下编译安装 Aseprite 脚本 日本关西系列|Day 2 京都的半日闲逛 美国Apple官网购买礼品卡订阅 ChatGPT Plus 北京・中关村森林公园(2026) 日本关西系列|Day 1 抵达临空城与大阪首日 Memos: 查询 Apple ID 注册时间 Memos: Ghostty 开箱即用配置 代码考古:用 gitcharts 挖掘 Git 仓库的演变轨迹 烹饪日记:香煎罗非鱼 Memos: 新时代程序员的顶级焦虑 Memos: 博客新增图文布局和轮播图效果支持 Memos: 最适合空气炸锅烤着吃的红薯品类 Memos: 记录「95分」好吃的‘小帅香菇面’ 妻子爷爷的‘朝鲜军功奖章’ Memos: 博客切换为 Shiki 代码高亮方案 Memos: 博客新增划线、重点及荧光笔效果支持 记录博客字体分包与字体子集化 Memos: 邻座吃饭的一家三口 人在囧途之哈囧 哈尔滨・乡村的冬季 查看香烟生产日期 哈尔滨・东北虎林园 Memos: 来自日本的 ndjp 提供免费的三级子域名 Memos: 刚听说 autojump, 真的好用 Memos: 体验 OpenCode + Superpowers + GPT 5.2 开发需求 Memos: 杰我睿爆雷 GoReleaser 自动发布 Go 镜像到 DockerHub & GitHub Release 初识 Volta & Corepack 前端版本管理工具 部署 Beszel 把 “小鸡们” 归拢起来 Memos: Claude Code in Action 中文版教程 2025 年度回顾 Memos: 体验 tanaos-text-anonymizer-v1 NER 模型 Memos: 查询 Google 账号注册时间 Memos: 关于 Z30 在室内摄像被手机降维打击这点儿事儿 阅读《我与地坛》 Memos: Ghostty + Neovim + LazyVim Memos: 找到 Cursor 运行巨慢的一个原因 Memos: 京东家政 哈尔滨灵活就业人员医保退休待遇申领条件 记地暖不热的维修过程 Memos: 赛博菩萨 Cloudflare 又挂了 AnyTLS 软件的配置与使用 阅读《在巴东》 Memos: Web Archive 暂时离线 忆时光:十五年前我的家(动迁前夕) macOS 系统部署 Valkey 集群模式 阅读《一个名叫欧维的男人决定去死》 Memos: Cursor 服务故障部分功能不可用 阅读《丰乳肥臀》 爱人回家送奶奶 Memos: AWS 美东可用区 P0 故障(us-east-1) 2025 北京社保下限上调|个体户缴费随之上涨 铁锅重生记 不锈钢盆与放心水源改造计划 阅读《不被大风吹倒》 基于 Supabase 构建示例应用(中篇):实现 Vue 前端页面 基于 Supabase 构建示例应用(上篇):数据库与接口 阅读《三体》之地球往事 Oracle Free 实例重装系统 非京籍个体户缴纳社保(补充):“无有效的汇总预处理信息” 解决办法 阅读《芯片简史》 阅读《简约至上:交互式设计四策略(第2版)》 阅读《审判》 阅读《统计数字会撒谎》 达达秒送骑士 日本关西系列|在动物园前站找到海南本线 观影《长安的荔枝》 Memos: 记录两个在线工具 地球 Online:外卖骑手体验报告 杜师傅夜话:附身与归途 日本关西系列|使用投放硬币的行李寄存箱 日本关西系列|将多余零钱充值到西瓜卡 日本关西系列|网上购买大阪往返白滨高速巴士 乌鲁木齐・赛里木湖 “778 老哥” 摄影摘选(转载) 使用 Restic 来备份重要数据 Backing Up Important Data with Restic Sauvegarder des données importantes avec Restic Resticで重要なデータをバックアップする Cursor 开发 Obsidian 插件记录 非京籍个体户缴纳社保(十):新增并缴纳个人所得税-工资薪金 非京籍个体户缴纳社保(九):公积金开户增员与缴费 非京籍个体户缴纳社保(八):税务申报与工商年报 非京籍个体户缴纳社保(七):社保费用申报与缴纳 非京籍个体户缴纳社保(六):医保公共服务平台 - 增员确认 非京籍个体户缴纳社保(五):北京电子税务局 - 税务报道 非京籍个体户缴纳社保(四):北京市社会保险网上服务平台 - 增员与社保卡领取 非京籍个体户缴纳社保(三):社会保险网上服务平台 - 单位信息登记 非京籍个体户缴纳社保(二):北京 e 窗通平台提交申请 非京籍个体户缴纳社保(一):概览与先期准备 养老保险零基础入门指南(速通版) 了解北京门诊看病工会“二次报销”互助金 注册 US.KG 免费域名(dpdns.org) 白嫖 Cloudflare R2 + Worker 搭建私有镜像仓库 再思 JWT 的使用场景和算法选择 黑龙江・木兰县属小村落的星空(2024) 优化网站的 SSL Labs 总体评级为 A+(禁用旧协议 & 启用 HSTS) 了解 OCSP Stapling 证书吊销验证机制 山东・烟台中秋两三日(2024) 分享改造后的博客发布流程和访问链路 边缘网络:白嫖 Cloudflare R2 博客图床(DNS 国内外分流)
Nginx 启用 HTTPS/3
2024-09-29 · via 东东's Blog

前置条件

系统版本:Ubuntu 20.04 Nginx 版本:1.18(稍后需要升级) 用来测试的服务:当前存在可用的 HTTPS/2 网站 OpenSSL:3.0.2(可选升级)

检查 Nginx 版本并升级

我的系统恰好是 Ubuntu 20.04 + Nginx 1.18,可以参考这篇文章升级 Nginx:Upgrading Nginx from version 1.18 to 1.25 (Ubuntu 20.04)

# 备份 Nginx 配置
$ sudo cp -r /etc/nginx /etc/nginx-backup

# 添加 Nginx Repository 
$ wget http://nginx.org/keys/nginx_signing.key 
$ sudo mv nginx_signing.key /etc/apt/trusted.gpg.d/nginx_signing.gpg
# sudo apt-key add nginx_signing.key

$ echo "deb http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list

# 更新软件列表
$ sudo apt update

# 安装最新的 Nginx
$ sudo apt install nginx

# 检查版本
$ nginx -v
nginx version: nginx/1.27.1

已升级到了 1.27 版本

Nginx 示例配置

没有特别需要说明的,字段含义可以问下 AI,修改配置后记得 nginx -s reload 加载配置

server {
    # HTTP/3
    listen 443 quic reuseport;
    listen [::]:443 quic reuseport;

    # HTTP/2
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;

    server_name yasking.org;
    merge_slashes off;

    # 证书
    ssl_certificate /etc/letsencrypt/live/yasking.org-0001/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yasking.org-0001/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    # ssl_prefer_server_ciphers on;

    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';

    # O-RTT QUIC connection resumption
    ssl_early_data on;

    # Add Alt-SvC header to negotiate HTTP/3.
    add_header Alt-Svc 'h3=":443";ma=86400';

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;

    # 启用 HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
    add_header X-Content-Type-Options nosniff;

    # 日志配置
    access_log /var/log/nginx/yasking.access.log;
    error_log /var/log/nginx/yasking.error.log;

    root /usr/share/nginx/html;
    index index.html index.htm;
    location / {
        try_files $uri $uri/ =404;
    }
}

# 强制 HTTP 重定向到 HTTPS
server {
    listen 80;
    server_name yasking.org;
    return 301 https://$server_name$request_uri;
}

升级 OpenSSL 版本(可选)

当前版本 3.0.2,当前最新是 3.3.2,不升级也可以,升级步骤如下

# 下载当前最新的 OpenSSL 程序源码
$ wget https://www.openssl.org/source/openssl-3.3.2.tar.gz

# 解压缩并生成编译配置
$ sudo tar -zxvf openssl-3.3.2.tar.gz -C /usr/src/
$ cd /usr/src/
$ sudo ln -s openssl-3.3.2 openssl
$ cd openssl
$ ./config --prefix=/usr/local/ssl

# 机器 CPU 不太行的话执行 sudo make -j 1 && sudo make install  
$ sudo make -j $(nproc) && sudo make install

# 新建 /etc/ld.so.conf.d/openssl-3.0.conf 添加一行 /usr/local/ssl/lib64,此处的 /usr/local/ssl 根据 ./config 的 --prefix 参数确定
$ cat /etc/ld.so.conf.d/openssl-3.0.conf
/usr/local/ssl/lib64

# 备份原 OpenSSL 可执行程序,创建新的链接
$ sudo mv /usr/bin/openssl /usr/bin/openssl_bak
$ sudo ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

# 链接运行时的动态链接库
$ sudo ldconfig

# 查看库的安装情况
$ sudo ldconfig -v 

HTTPS/3 访问验证

Curl 命令

$ docker run -t --rm alpine/curl-http3 curl --http3 -I https://yasking.org:443

macOS Chrome 129

Windows Firefox 130

在火狐上有个叫「HTTP Version Indicator」的扩展,安装后可以显示 HTTP 协议版本

为什么不是 macOS 的 Firefox 测试?因为它一直显示 HTTP/2,清除缓存也没用,我暂不清楚原因

在线网站:https://http3check.net

在线网站:https://http3test.com/

最后

HTTP/3 虽然不是一个新技术,但也在快速发展和完善中,可能今天的配置和参数符合标准,后天浏览器就不认降级回 HTTP/2

云平台、各个基础组件库都需要陆续迭代支持,需要一个过程,本篇借助 Nginx 使得主域名支持通过 HTTP/3 协议访问

相比于一两年前,部署方便很多,Nginx 和 OpenSSL 都不用自己编译,安装新版即可,先这样

参考