每次请求 1.07 秒,而其中只有四分之一是服务器
我跟踪了对本站的一次真实请求,把每个阶段都计时了。意外的不是总耗时,而是服务器只占其中一小部分——以及如果要优化,最该动的是哪个阶段。
用一台机器服务很多东西:虚拟主机、反向代理、缓存,以及自动化证书。
29 篇文章
我跟踪了对本站的一次真实请求,把每个阶段都计时了。意外的不是总耗时,而是服务器只占其中一小部分——以及如果要优化,最该动的是哪个阶段。
在真实的一次性容器里实测 nginx worker 调优:为什么 worker_processes auto 等于每核一个 worker、worker_connections 的并发上限怎么算,以及真正先撞上的 ulimit -n / worker_rlimit_nofile 文件描述符天花板。我真实地触发了 worker_connections are not enough 警告和 152 行 accept4() No file descriptors available,然后修好了它。
深入 Content-Security-Policy(CSP):在一次性 nginx 容器中跑真实的响应头前后对比、CSP nonce 与哈希如何取代 'unsafe-inline'、frame-ancestors 如何阻止点击劫持、Report-Only 模式如何让你在不弄坏站点的前提下测试,以及一份静态站点的可直接复制起步配置。
在真实文件上实测 brotli 与 gzip:完整的 gzip 1-9 与 brotli 1-11 字节数对照表、压缩级别的 CPU 开销、nginx gzip 与 brotli 模块配置、构建期预压缩静态资源、BREACH 风险,以及哪些内容不该压缩。
条件请求让客户端在下载正文之前先问一句「变了吗」。用一次性 nginx 跑真实 curl 输出:ETag + If-None-Match 返回 304 Not Modified、正文 0 字节,If-Modified-Since 与 ETag 的对比,If-Match 返回 412 做乐观并发,以及 Range 返回 206 支持断点续传。
一次动手实测:nginx + ModSecurity + OWASP CRS 4.30 拦住真实的 SQL 注入、XSS 与路径遍历,403 响应与真实审计日志规则 ID(942100、941100、930110);以及 DetectionOnly 灰度上线、误报、延迟代价,以及小型自托管场景下 WAF 到底该放在哪。
用真实请求跑通 nginx proxy_cache:对着一个会计数的上游演示 MISS→HIT、X-Cache-Status 排查、缓存键、bypass、stale 容错,以及 OSS 版 nginx 无法 purge 的坑。
一次动手对比 HTTP/2 与 HTTP/1.1:用一次性 nginx 容器跑出真实 curl 与 nghttp2 输出,讲清 HTTP/2 多路复用、HPACK 头压缩、nginx http2 配置、TCP 队头阻塞为何要靠 QUIC,以及在本地与高延迟链路上分别量到的诚实数字。
一次动手实践的 HAProxy 走查:HAProxy 配置模型(defaults、frontend、backend)、mode http 与 mode tcp、roundrobin 与 leastconn、真正把死掉的后端实时踢出集群的健康检查、timeout 与 retry,以及 stats 页面——全部在 haproxy 3.0 上复现,输出真实可验。
如何使用 nginx stream 模块作为 TCP/UDP 代理。通过真实配置讲解 L4 与 L7 的区别、ssl_preread SNI 路由、UDP 代理、负载均衡和 proxy_protocol。
Accept-Ranges、Range、Content-Range、206 Partial Content 与 416 到底是干什么的,下载工具和视频播放器为什么离不开它们,If-Range 如何让断点续传在文件变化时依然安全,为什么动态生成的响应往往做不了范围请求,以及在 nginx 里怎么开启它(以及什么会把它弄坏)。
一旦在应用前面放上 CDN、负载均衡或反向代理,$remote_addr 就变成了代理自己,而不是你的用户。本文讲清 X-Forwarded-For、X-Real-IP、Forwarded 的语义,nginx real_ip 如何用 set_real_ip_from 与 real_ip_recursive 重写客户端地址,为什么 proxy_protocol 更难被伪造,以及盲目信任一个不是你写的头部会带来什么后果。
一份写给后端的实用安全 cookie 指南:HttpOnly、Secure、SameSite、Path、Domain 与 __Host- 前缀各自到底防住什么,为什么 cookie 既不是 session 也从不加密,session cookie 与 token cookie 在 CSRF 上的区别,以及那些经典错误——附真实的 curl 与浏览器抓包输出。
我用一个一次性的 nginx 挡在一个每请求约 1 秒的小应用前面,在请求进行中发送 SIGTERM,眼看着请求变成 502 Bad Gateway——然后用真正的连接排空把它修好:为什么部署会造成 502、nginx reload 与 restart 的区别、Kubernetes 的 preStop 与 terminationGracePeriodSeconds,以及各技术栈的优雅关闭清单。
一次动手实践的 Traefik 走查:动态反向代理与 nginx 静态配置的区别,provider 如何喂给 routers、middlewares 和 services,用真实的 Traefik Docker labels 把容器接上路由,新容器上线时的 auto-discovery,实时 /api 输出,以及什么时候朴素的 nginx 更简单。
对象存储(object storage)到底怎么运作:扁平命名空间、整对象写入、为什么 S3 API 会胜出,以及如何在本机跑 MinIO。含真实命令与输出:建 bucket、上传下载、bucket policy、presigned URL、versioning、lifecycle 规则,以及用 S3 SDK 从代码访问——外加它的真实边界和适用场景。
用 openssl 搭一套极小的 PKI,让 nginx 通过 ssl_verify_client 强制要求客户端证书(client certificate),再用 curl 与 openssl s_client 验证握手,并绕开 EKU、SAN、证书链与吊销这几个最容易踩的坑。
一份动手验证的 Caddy vs nginx 反向代理对比:同一个任务分别用两边写,真实的 curl -I 输出,HTTP/3 与压缩,TLS 证书处理(automatic HTTPS 对比 certbot),配置体量与易用性,以及一份决策清单。
一份动手验证的 nginx 配置手册:nginx location 匹配到底谁优先(精确、^~、正则、前缀),root 与 alias 的区别,SPA/静态/API 三种 nginx try_files 写法,add_header 继承陷阱,proxy_pass 结尾斜杠的差别,rewrite 与 return 的取舍,gzip 与缓存头,client_max_body_size,以及怎么读 nginx -T。每条规则都有真实输出。
自建 Git 服务器什么时候值得,托管 forge 什么时候反而更好,以及如何避开 Gitea / Forgejo 的坑:安装方式、SSH 与 HTTPS 克隆地址、反向代理与证书、webhook 可达性、邮件、升级,以及一份你真的恢复过的备份。
一次讲清 QUIC 与 HTTP/3:它们要解决的 TCP 队头阻塞、握手过慢与中间盒僵化,基于 UDP、内建 TLS 1.3、流与连接迁移,0-RTT 与 1-RTT 握手、QPACK,以及 nginx 与 Caddy 里的 UDP 443 运维和测试方法。
WireGuard 装进容器看起来很简单,直到内核模块、/dev/net/tun 和 NET_ADMIN 开始作祟。一份实用的 WireGuard Docker 指南:主机命名空间 vs 容器命名空间、NET_ADMIN、wireguard-go 兜底、kill switch 与路由陷阱、把密钥留在镜像之外,以及什么时候干脆别用容器。
一篇讲透 HTTP 缓存的实用指南:浏览器、CDN 与反向代理三层缓存谁听谁的,真正重要的 Cache-Control 指令,ETag 与 Last-Modified 校验器,304 Not Modified 往返过程,no-cache 的经典误读,指纹缓存与重验证之别,Vary 与 Cookie,以及一份可用的静态站点 nginx 配置。
面向静态站点的实用安全响应头指南:HSTS 及其 includeSubDomains 陷阱、严格的 Content-Security-Policy、X-Content-Type-Options、Referrer-Policy、frame-ancestors、Permissions-Policy 与 CORS 基础,外加 nginx add_header 的继承陷阱、修复办法和测试方法。
我在一台服务器上做零停机部署的完整做法:静态站点用原子符号链接切换,nginx 背后的服务用蓝绿发布,带健康检查的切换、连接排空、nginx reload 与 restart 的区别、快速回滚,以及那些真正会导致故障的失效模式。
我为几十个子域做自动化 TLS 的完整实践:ACME 流程、HTTP-01 与 DNS-01 挑战的真实取舍、用 DNS-01 签发通配符证书并安全保存凭据、续期钩子、systemd 定时器与监控、速率限制,以及那些真正会出问题的故障模式。
为什么客户端追踪同时是隐私和性能的双重税,自托管统计从 GoAccess 读服务器日志到 GoatCounter、Umami、Plausible 的光谱长什么样,一套具体的 GoAccess 配置,以及基于日志这条路诚实的边界。原则是:只测那些会改变你决策的东西。
这是我在 2026 年真正在跑的自托管栈:一台公网 VPS 作为唯一入口(nginx、自动证书、多个虚拟主机),背后是一张私有 overlay 网络,加上自建 Git 服务、基于日志的统计、文件同步、密码库和邮件。每一项都附上诚实的「显存 / 精力 / 省心」备注,也列了我坚决不自托管的几样东西,以及新手第一天千万别碰什么。
Docker 不是运行服务的唯一方式。我用 nginx 做反向代理、systemd 单元与定时器做守护和调度、flock 做单飞任务,再用符号链接完成原子部署,在一台 VPS 上托管多个站点和定时任务。文末也诚实聊聊哪些情况下你确实应该直接用容器,并附上可直接复制的配置。