自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

原创 TB335FC(MT6835) GhostLock临时Root实践(二):执行与风险控制

声明:本文仅为在本人拥有设备上进行的个人技术验证记录,旨在分享特定固件版本下的实际表现,请勿用于任何非授权设备。操作未修改系统分区,重启后权限自动失效。内核漏洞操作存在死机、重启、数据丢失等风险,请提前备份并自行承担后果。临时 Root 可用于 su -c 执行命令、加载 KernelSU 模块、App 提权、修改部分内核参数等。临时 Root 重启失效,profile 可保存在 App 已保存配置中,重跑较方便。不同固件版本差异较大,本文参数仅对应上述系统与内核版本,请自行校验后再操作。

2026-10-26 20:13:38 352

原创 TB335FC(MT6835) GhostLock临时Root实践(一):设备与profile提取

MTK 机型按官方 MEDIATEK.md 需要补充两个物理地址参数,可从官方固件的 boot.img 和 vendor_boot.img 通过官方提取器生成。结论:BL 未解锁、数据未清、未刷分区,通过 GhostLock 内核漏洞加载自制 profile,获得临时 uid=0,KernelSU LKM 可正常加载。系统:Android 15,TB335FC_CN_OPEN_USER_M1317.3_V_ZUXOS_1.1.10.522_ST_251110。CVE-2025-21479 不适用。

2026-10-26 20:11:56 395

原创 网页一片白?Docker 跑 Nginx 读不到文件,403 Forbidden 排查实录

SELinux:如果你的云服务器开了 SELinux(虽然 Ubuntu 默认没有,但 CentOS 有),光改 rwx 权限没用,必须加 😒 或 :Z 标签。挂载路径写错:Docker 挂载如果是空目录,Nginx 会用自己的默认欢迎页顶替,导致你看到的是 Nginx 欢迎页,而不是你的大屏。Nginx 跨过门(挂载目录)去拿文件,发现文件夹大门紧锁,连看都不让看,直接甩个 403。宿主机的文件,是我用 ubuntu 账号建的,权限是 rw-r–r–。发现目录是 700,只有创建者能进。

2026-10-25 17:42:30 240

原创 2G 内存被谁吃了?一招调优 MariaDB,拯救你的小内存监控大屏

忘了设置 max_connections:Flask 代码一旦有连接泄漏,瞬间发起几百个连接,MariaDB 会为每个连接分配内存,瞬间把机器打爆。SSH 进去一查,dashboard 和 monitor 都好好的,唯独 db 容器一口气吃了 800 多 MB 内存,直接把服务器榨干了。预期输出:db 容器的内存占用从 800MiB 降到了 150MiB 左右。但我的服务器总共才 2G,它吞了 1G,其他租客(Flask、Kuma)连站脚的地方都没了,系统自然卡死。直接在容器里改配置:容器重启后配置全丢。

2026-10-25 17:41:41 75

原创 大屏突然 502?一次 Nginx Buffer 溢出引发的血案:upstream sent too big header

现在 Flask 塞过来一堆附件(用户登录的 Cookie、很长的 JWT Token、复杂的 CORS 头),麻袋撑爆了。Nginx 兜不住,直接把快递扔地上,大喊一声“502”。Nginx 手里拿了个固定大小的麻袋(Buffer),默认是 4K 大小。F12 网络面板里,502 消失,正常的 200 响应返回,Header 里的 Token 完整传递。本地不复现:本地开发环境通常不带复杂的 Cookie 或 SSO Token,导致本地永远测不出这个错,必须上生产。调大 Nginx 的麻袋。

2026-10-24 22:26:41 86

原创 2核2G 的 Flask 该起几个 Worker?别再用公式死记硬背了!

内存泄漏(Memory Leak):如果你的 Flask 代码写得不够严谨(比如全局变量存大数组),Worker 内存会越涨越高。建议加个 --max-requests 1000 参数,处理完 1000 个请求就让 Worker 重启一下,把内存强制清空。再加上 MariaDB(另一个大厨)和 Kuma(收银员),厨房(内存)瞬间挤爆,房东(系统)直接把厨师扔了出去。小内存机器,内存才是瓶颈,不是 CPU。2G 内存,系统基础跑掉 300M,MariaDB 吃掉 400M,Kuma 吃掉 200M。

2026-10-24 22:26:07 170

原创 获取的全是 172 开头的假 IP?Nginx 反代后,Flask 怎么才能拿到真实访客 IP?

remote_addr vs $proxy_add_x_forwarded_for:X-Real-IP 适合单层代理。我用的是 Nginx 反代 Flask 容器,request.remote_addr 拿到的全是 Docker 内网 IP,根本不是访客的真实公网 IP。如果有严格的安全需求,必须配合 Nginx 的 real_ip_module 模块处理。预期输出:Your Real IP: 你的4G公网IP(不再是 172 开头)。Nginx 说:“是我给的(172.18.0.x)”。

2026-10-23 18:36:35 88

原创 报数据库连不上?Docker Compose 启动顺序假象:depends_on 不是万能的!

老版本 Compose 不认:如果你的 docker compose 版本很老(V2 以下),可能不支持 condition: service_healthy,必须升级 compose 插件。健康检查命令写错:test 里的命令如果没有指定 CMD 或者写错,容器永远 unhealthy,导致后端永远起不来。不写超时退出:如果不配合 restart: always(重启策略),一旦后端起太快报错退出,它就不会自己重试了。dashboard 跑得飞快,起跑后直接敲门,发现 db 还没弄好,立刻报错退出。

2026-10-23 18:35:19 199

原创 改了 IP 就报 502?Nginx 缓存 DNS 的隐蔽大坑,光 reload 没用!

明明容器已经起来了,curl 127.0.0.1:5000 也是通的,但 Nginx 就是连不上。原路径丢失:使用变量 set $backend 后,请求的路径如果带参数,有时会被截断,需要在 proxy_pass 后面加上 $request_uri。启动时,他看了一眼电话本(DNS),把后端地址(比如 172.18.0.5)抄在脑子里。下次再重建容器(IP 变了),最多等 10 秒,大屏自动恢复,不用再手动重启 Nginx。你把后端容器重建了,相当于换了个人,IP 变成了 172.18.0.6。

2026-10-22 19:21:25 196

原创 Nginx 报错 Too many open files?一招 ulimit 解决高并发下的文件句柄耗尽

只改 limits.conf 没用:如果你是用 systemctl restart nginx 启动的,systemd 会覆盖 limits.conf。必须改 /etc/systemd/system.conf。reload 不生效:改 ulimit 必须 restart,光 nginx -s reload 没用,因为进程 PID 没变,号牌数量不会重新分配。Nginx 既要接访客(连接),又要看日志(文件),还要连 Flask(代理),还得转发静态资源。访问大屏,502 消失,系统顶住了并发。

2026-10-22 19:20:43 149

原创 Nginx 代理非标端口 HTTPS 踩坑

用非标端口 8443。Certbot 续期:非标端口(如 8443)Certbot 默认测 80 端口。必须用 --http-01-port 8443 或改用手动 DNS 验证。小学生版:Nginx 以为是标准 443 门。Nginx 告诉浏览器“去 443 门”,浏览器敲 8443 门,死循环。根本原因:Nginx 传给后端的 Host 头没带端口。Flask 静态资源路径:重定向修复后,如果 CSS 丢失,检查前端代码是不是写死了 /static/。host 不带端口,$http_host 带端口。

2026-10-21 16:44:14 193

原创 Kuma SQLite 备份坑

直接 cp kuma.db,没带上 -wal 和 -shm 文件。起容器,Kuma 打不开。直接备份 Volume:如果停服时间允许,用 docker compose stop monitor,备份整个 /app/data 目录,再 start。忘记清理临时文件:.backup 会在容器里生成新文件,记得在容器内 rm,否则容器磁盘爆满。版本兼容:恢复时,新 Kuma 版本的 DB schema 可能升级,备份只能同级恢复。必须用 SQLite 官方备份命令,或者使用 Docker 卷停服备份。

2026-10-21 16:44:03 150

原创 2G 内存跑 5 个容器频频 OOM?一招 Swap 抢救你的 2核2G 小破服务器

这时候备份脚本(另一个租客)也想进来,仓库塞不下了,房东(Linux 系统)一看急眼了,直接把一个正在干活的租客扔出去(OOM Killer,Out of Memory),导致服务崩溃。再次跑备份脚本,系统不卡了,用 vmstat 1 看,si 和 so(Swap 换入换出率)保持在 0 或者个位数,说明物理内存稳住了。把 Swap 放在机械硬盘上:虽然我们云服务器大概率是云盘,但如果是本地机械盘,Swap 过于频繁会导致系统巨卡,Swap 只是救命药,不是健胃消食片。

2026-10-20 16:10:19 157

原创 容器日志“穿越”了?一次 Docker 时区不一致引发的监控时间错乱惨案

小学生版解释:宿主机(你的云服务器)戴的是“北京时间”的手表,但 dashboard 容器是个老外,它默认戴的是“伦敦时间”(UTC)。它去写数据库的时候,写的是伦敦时间,导致整个数据时间线全乱了。Python 代码里的时间处理:如果代码里用了 datetime.now(),建议存数据库时统一存 UTC,前端展示时再转回东八区,避免跨时区部署的麻烦。只改宿主机没改容器:很多人用 timedatectl 把宿主机改成了北京时间,就以为容器也同步了,其实容器还在自己玩。宿主机的时间是 CST(东八区)。

2026-10-20 16:09:45 214

原创 别再背那些又长又臭的 Docker 命令了,用 Makefile 一键搞定

如果你碰巧在服务器上建了一个叫 backup 的文件夹,你再敲 make backup,Make 就会告诉你:“这个文件已经是最新的了,不需要执行”。在跟 docker-compose.yml 同级的目录下,新建一个文件名就叫 Makefile 的文件(注意首字母大写,没有后缀名)。解法:永远在文件开头加上 .PHONY: 你的命令名,告诉 Make“无视同名文件,强制当成命令跑”。Makefile 的语法极其死板:命令前面必须是一个真正的 Tab 制表符,绝对不能是 4 个空格。

2026-10-19 16:40:34 155

原创 别再裸奔了!用 Nginx 安全头给你的监控大屏穿上防弹衣

Strict-Transport-Security 效果极好,但你一旦给浏览器下发了这个头,在 max-age 设定的时间内(比如一年),浏览器哪怕访问 http:// 也会自动强行转成 https://。如果你的后端返回了 4xx 或 5xx(比如接口报错了),安全头就丢了。但浏览器拿到包裹后,里面如果有恶意代码(XSS),或者被别人偷偷嵌到别的网页里(点击劫持),浏览器默认是不知道该怎么防御的。解法:第一次配 HSTS 时,max-age 先设小一点,比如 300(5分钟),确认稳定了再改大。

2026-10-19 16:38:42 99

原创 Docker Compose 多环境管理:别把开发配置带进生产环境

很多人图省事,直接复制一份 docker-compose.yml 改个名,变成 docker-compose.dev.yml 和 docker-compose.prod.yml。如果你在服务器上直接敲了 docker compose up -d,而没有加 -f 指定生产配置文件,Docker 会自动加载那个 override.yml。如果在基础文件里写了 ports: [“80:80”],在 override 里写了 ports: [“8080:80”],最终结果只有 8080:80,80 端口不会保留。

2026-10-18 19:52:25 170

原创 从裸机到全栈监控:我写了个 5 分钟一键初始化脚本

这在安装软件时很容易卡住——比如你脚本里写 docker --version 检查是否安装,如果没装,这条命令返回非 0,脚本直接崩了,后面的安装逻辑根本没执行。如果是用脚本自动跑的,一旦卡在这个界面,整个脚本就死锁了。把脑子里的“步骤列表”转化为“代码”,既能保证每次重装环境的一致性,又能省下喝杯咖啡的时间。解法:生成完立刻 chmod 600 .env,并且在使用 docker compose 前,确保你的脚本没把它拷到别的地方。重装系统后,把脚本传上去(或者用 curl 直接拉),跑一下:。

2026-10-18 19:00:59 148

原创 每次开机手动检查 6 样东西?我写了个 2 秒自检脚本

date -d “$END” +%s 在 Ubuntu 上是 GNU date 的扩展,macOS 不认。自检脚本应该挂在登录提示里,但不要在登录时自动执行。如果全都用红色,大脑会脱敏,反而忽略真正的危险。服务器上有几个容器、多个监听端口、HTTPS 入口、SSL 证书、每日备份。不是不知道要检查什么,而是没有一个统一的"体检清单"。想到什么查什么,容易遗漏,也不便于对比。这就好比去医院体检,医生不会每次临时想查什么,而是有一张固定的体检单,一项一项过。结构设计:6 个检查节,每节独立,不互相影响。

2026-10-17 11:26:30 216

原创 服务器时间错乱:一个让监控和定时任务全乱套的隐藏地雷

CST 这个缩写,在美国代表中部时间(UTC-6),在中国代表北京时间(UTC+8)。而且你之前配的“每天凌晨 3 点备份”的 cron 任务,查看日志发现它是在下午 3 点才跑的。定时任务(Crontab):你写 0 3 * * * 以为凌晨 3 点跑,其实是 UTC 的 3 点,也就是北京时间上午 11 点跑。这是 Linux 云服务器最常见的一个坑:默认时区是 UTC(协调世界时),而你人在中国,用的是 CST(北京时间,UTC+8)。如果输出是 SYSTEM,说明它跟着系统走了(这是对的)。

2026-10-17 11:26:11 948

原创 备份和服务器在同一台机器上,等于没备份

setfacl -m u:backup_reader:x 只给"穿过"权限,不给"列目录"。Windows 写密码文件时如果用 Set-Content,会多一个 \r,GPG 说"密码错误"。服务器每天 03:00 自动备份,产出业务包 + GPG 加密的 secrets 包。ACL 是精确到"某一个人"的。只设"每天 4:00",但电脑经常关机。加一个"登录后 5 分钟"触发,双保险。这是备份的经典盲点:同机备份只能防"误删文件",不能防"整机丢失"。为什么是"电脑拉"而不是"服务器推"

2026-10-16 18:38:11 105

原创 别再 chmod 777 了,用 ACL 给它开一扇窗

目录是 /home/user/backups/,但 /home/user 的权限是 drwxr-x—(只有 user 和 user 组能进)。需要一个专用备份用户 backup_reader,能读到 /home/user/backups/ 目录下的文件。如果之后执行 chmod 700 /home/user,可能会覆盖掉 ACL。user:backup_reader:–x — 只给 x(穿过),不给 r(列目录)先 apt install acl,一条命令的事,但不知道就会卡住。

2026-10-16 18:38:00 174

原创 监控跑了一个月,出事时微信一声没响

服务器上跑着 Uptime Kuma,监控 3 个服务,接了 ServerChan 微信通知。界面只能看单个监控,monitor_notification 表能一眼看出全局绑定情况。notification.active=1 只表示渠道本身开着,不代表任何监控在用它。然后在 Kuma 界面点 Test Notification,微信立刻收到测试消息。建完监控就以为完事了,是最大的错觉。通知渠道建好了,监控也建好了,但两者从来没连上。坑 3:排查监控问题,SQLite 比界面更直接。

2026-10-15 18:55:25 180

原创 密码明明一样,为什么 GPG 说“错的“?

服务器上用 GPG 加密了一个备份包,密码存在 /root/.backup_pass。记事本里两个文件长得一模一样,只有看字节才知道差一个 \r。跨平台处理密钥文件,永远用 Format-Hex / xxd 确认。Windows 的 Set-Content 默认在每行末尾加 \r\n,GPG 把那个 \r 也当成密码的一部分了。从密码管理器复制时,有的会带上末尾换行。坑 2:Linux 的 echo 也会加换行。密码是从服务器抄过来的,一个字符没差。坑 3:密码管理器里存的值可能带换行。

2026-10-15 18:54:52 158

原创 Nginx 限流实战:防 CC 攻击和爬虫的四个配置

如果前面挂了 Cloudflare / CDN,Nginx 拿到的 $remote_addr 是 CDN 的 IP,不是真实用户 IP。用 $binary_remote_addr 时,它已经是被 real_ip 替换后的真实 IP。坑 3:CDN / 反代后,$binary_remote_addr 是 CDN 的 IP。如果攻击者用大量代理 IP(比如僵尸网络),状态表满了之后,新 IP 无法被限流。调优方法:先配宽松一点,观察日志,看正常用户的峰值是多少,再往下压。

2026-10-14 18:57:22 116

原创 Nginx gzip 压缩:一个配置让页面加载快 3 倍

application/javascript 不加,chart.min.js 就白压了。关键点:gzip_types 默认只压 text/html,JS / CSS / JSON 都要显式加。如果你有 .gz 预压缩文件(比如构建时生成),要用 gzip_static 直接发,不要再压。级别 9 比级别 5 只多压 3%,但 CPU 多花 50%。效果:Nginx 优先找 chart.min.js.gz,直接发送,省 CPU。抽真空 90% 就够了,非要抽到 99% 得花大力气,收益很小。

2026-10-14 18:57:10 313

原创 服务器磁盘满了?从告警到清理的完整排查

背景凌晨收到微信告警:磁盘使用率超过 90%。40G 的盘,只剩 2G。再涨一点,MariaDB 写不进去,Nginx 日志写不了,整机就挂了。想做到:快速定位谁占的空间,安全清理,并防止复发。原因。

2026-10-13 16:23:31 257

原创 Docker Volume 备份与恢复实战:不停机迁移数据

如果只看到 ./ 一行,说明打包时 volume 是空的(挂载点写错或容器没起过)。包能解压:tar -tzf xxx.tar.gz > /dev/null。包非空:tar -tzf xxx.tar.gz | wc -l > 1。容器本身随时可以删了重建,但Volume 里的数据丢了就真丢了。正确做法:用临时容器挂载 volume,在容器里打包。常见:备份脚本写好了,跑了一年,从没检查过包里有什么。这行的含义:删掉所有文件,包括 . 开头的隐藏文件。容器正在写文件时,拷出来的数据可能是半截的。

2026-10-13 16:16:00 229

原创 Uptime Kuma 告警分级:从 3 个监控到 20 个,微信不再被骚扰

背景一开始用 Uptime Kuma 就 3 个监控,都推到微信。后来陆续加到十几个:主站、监控站、数据库端口、缓存命中率、磁盘空间、证书到期……结果微信被轰炸:半夜 Kuma 重启,18 个监控一起报 Down,18 条微信数据库端口偶尔抖动,1 分钟报一次,连报 10 分钟真正重要的告警(主站挂了)反而被淹没想做到:该叫醒我的叫醒我,不该叫的记下来就行。解决。

2026-10-12 13:36:33 174

原创 fail2ban 实战:从默认配置到生产可用

fail2ban 内置了 nginx-http-auth(basic auth 失败),但没有针对 404 扫描的。为什么阈值这么高:正常用户也会遇到 404(比如浏览器请求 favicon),阈值太低会误伤。进阶:bantime.increment = true,让反复被封的 IP 越封越久。如果真被封了怎么办:从腾讯云控制台用 VNC 登录(不走 SSH),解封。第一次封 1 小时,第二次 2 小时,第三次 4 小时……规则:所有自定义放 /etc/fail2ban/jail.d/。

2026-10-12 13:17:17 245

原创 SSH 隧道穿透内网服务:不开公网端口的访问方案

我的服务器上跑了个 Uptime Kuma,监听在 127.0.0.1:3001,通过 Nginx 反代到公网的 8443 端口访问。就像你要看客厅里的一本书,但客厅门锁了。你在家里喊一声「给我 Kuma 页面」,管子把声音传到公司,Kuma 回答,声音再从管子传回来。有一次我改了 ufw 规则,误把 8443 也限制住了,Kuma UI 打不开。更好的做法:用现有的 SSH 连接(端口 22),把内网服务「映射」到本地。因为隧道出口在服务器本机,从服务器的视角看,就是本机自己访问自己。

2026-10-11 11:28:56 104

原创 Cron 任务工程化:日志、退出码、可观测性

跑了三个月才发现某个任务从第一天就失败了——cron 默认静默,出问题不告诉你。建议:用 set -uo pipefail,不加 -e,关键命令手动判断。服务器上跑了几个定时任务:每分钟写指标、每 5 分钟统计缓存、每天备份。set -e 会让 grep 没匹配到(退出码 1)时整个脚本退出。-xn = 排他锁 + 非阻塞,上次没跑完就跳过。坑 1:cron 的 PATH 很短。三、可观测性:Kuma Push。成功失败都上报,沉默也是信号。坑 3:set -e 的副作用。坑 2:重定向顺序不能反。

2026-10-11 11:28:23 60

原创 Linux 日志增量统计:inode + offset 方案(不丢不重)

我给 Nginx 缓存命中率写了个统计脚本,每 5 分钟跑一次,读 /var/log/nginx/dashboard_cache.log,统计 HIT/MISS 数量写进 MariaDB。而 offset 记录的是「已经读完的字节数」,等价于「下一个未读字节的前一个位置」。问题:logrotate 后新文件很小,如果新文件恰好比旧 offset 大,就不会触发「从头读」,会从中间截断读。还是不对:如果文件被删除重建(rm 后 touch),文件名没变,但内容全变了。行号 500 指向的文件变了。

2026-10-10 17:47:32 178

原创 Nginx 缓存调优:从 100% MISS 到 90% HIT

还有:只有配了 proxy_cache 的那层 Nginx 才有 HIT/MISS,外层反代的 $upstream_cache_status 是 -。Nginx 默认尊重上游的 Cache-Control——上游说别缓存,Nginx 就真不缓存。正确做法:显式写 proxy_cache_key,只留真正影响内容的部分。根因:后端返回了 Cache-Control: no-cache。生活小插曲:最近我开始写小说了,名字就不说了,等有一定流量再宣传。坑 2:proxy_cache_key 忘了固定。

2026-10-10 17:46:41 356

原创 2G 内存跑全栈监控大屏:为什么我放弃了 Prometheus 全家桶

为什么不跑 Node Exporter:Node Exporter 是给 Prometheus 拉数据的,不部署 Prometheus,它就是废的。我有一台轻量应用服务器:2 核 2G,Ubuntu 24.04,想搭一个监控大屏,看 CPU、内存、磁盘、服务状态,挂了推微信。数据量真的大了,加 PARTITION BY RANGE (TO_DAYS(ts)) 按月分区,性能还能再上一个台阶。我:SELECT …结论:所有容器 ~390MB,系统 + Nginx ~200MB,可用 648MB,从容运行。

2026-10-09 12:21:10 183

原创 Docker 自定义网络踩坑:容器怎么访问宿主机服务?

docker 容器的流量进宿主机,走的是「forward」链,不是「input」链。关键点:Kuma 用的是 compose 自动创建的自定义网络,名字形如 <项目名>_default,不是默认的 bridge。就像你住在一个小区,要去隔壁小区敲朋友家的门,明明知道门牌号,但就是走不过去。关键:ufw 默认会拦 docker 网桥到宿主机的流量,需要显式放行 docker 网段,而不是公网。前者只放 docker 内部,后者放公网。容器是个独立的小世界,里面的 127.0.0.1 是容器自己,不是宿主机。

2026-10-09 12:20:56 208

原创 docker exec 排查容器问题:从日志到进程

默认只能看到它的"外壳状态"(Up / Exited),要看内部,得用 docker logs、docker exec、docker inspect 这些工具"进到里面看"。如果连 sh 都没有,用 docker inspect 看配置,或者在 Dockerfile 里加一个调试用的 shell。而且 docker logs 看不到进程内部状态——要看进程,必须 docker exec 进去。docker ps 只能看到"容器活着",看不到"里面发生了什么"。坑 1:只看 docker ps,不看 -a。

2026-10-08 13:24:29 309

原创 GitHub Actions Workflow 优化:为什么我的部署要分两个 Job

背景最初的 workflow 只有一个 job:SSH 到服务器执行 deploy.sh。简单直接,但有个问题:代码写错了也会直接部署。比如手滑把 app.py 改错了,push 上去,Actions 照样 SSH 到服务器、git pull、docker compose up -d --build——服务器上的服务直接挂。想做到:先检查代码,通过了再部署。原因部署前必须先"体检"。就像寄快递前要检查包裹:东西对不对、包装破没破、地址写没写对。

2026-10-08 13:24:12 293

原创 Uptime Kuma + Server酱:微信实时接收服务器告警

默认端口 3001,如果绑 0.0.0.0:3001,全世界都能访问你的监控面板。阅读分享:今天给大家分享一本神作《Wireshark网络分析就这么简单》,读完你会手痒,想亲手抓一段自己的网络流量看看。有天半夜 Nginx 挂了,第二天早上才发现,网站挂了 8 小时。浏览器通过 SSH 隧道访问 http://localhost:3001,首次进入创建管理员账号。访问 https://sct.ftqq.com/,用微信扫码登录。再过 1 分钟,微信收到"恢复"通知。想做到:服务一挂,微信立刻收到通知。

2026-10-07 11:05:27 479

原创 Nginx 缓存命中率监控:从 X-Cache-Status 到实时统计

默认情况下,Nginx 的 $upstream_cache_status 只是一个响应头——它跟着响应发给浏览器,但不进日志。上一篇配好了 Nginx 缓存,响应头里加了 X-Cache-Status,浏览器 F12 里能看到 HIT 和 MISS。加了新日志后,/var/log/nginx/cache.log 会一直涨。Time 那一列:HIT 的耗时是 MISS 的 1/20 —— 缓存的加速效果一目了然。命中率 80% 听起来不错,但如果 MISS 的都是慢请求,用户体验还是很差。

2026-10-07 11:05:06 290

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除