域名备案通过后的 Nginx 反向代理配置
备案通过后,把域名接到本地服务:核心是 location / 反代到 127.0.0.1:8765,根路径单独返回静态首页。注意 proxy_set_header Host 与 X-Real-IP,否则后端拿不到真实来源 IP。踩过两次坑:一是 location = / 精确匹配与 location / 前缀匹配的优先级,二是改完配置忘了重载,白折腾半天。
技术笔记、项目实践与日常思考的汇集地——把踩过的坑写下来,把想明白的事记下来,也把值得分享的东西留下来。
备案通过后,把域名接到本地服务:核心是 location / 反代到 127.0.0.1:8765,根路径单独返回静态首页。注意 proxy_set_header Host 与 X-Real-IP,否则后端拿不到真实来源 IP。踩过两次坑:一是 location = / 精确匹配与 location / 前缀匹配的优先级,二是改完配置忘了重载,白折腾半天。
频繁迭代时把「语法检查 → 暂存 → 提交 → 推送」串成一条命令,用 -F 从消息文件读 commit 说明,避免中文乱码。配合 WebHook 实现推完即自动部署,开发节奏快了很多。
用标准库 http.server 起本地服务时,BaseHTTPRequestHandler 是单线程模型,慢请求会阻塞后续请求。解决方式:自定义 handler 里为耗时接口做内存缓存(TTL 级联),并给请求设置超时,避免一个慢源拖垮整体。另外写 do_GET 时记得把 JSON 响应统一包一层 {ok, data, ts},前端处理起来会省很多事。
多数据源接入时,不能只做"主备切换",还要做空档期判断:没有比赛时停止轮询、比赛开始时快速恢复,减少无意义请求。缓存要有"短 TTL + 失败兜底旧数据",让下游体验不中断。更重要的是:每一个数据源都值得先花一天把它的字段结构和状态码吃透,后面能少踩很多坑。
实时页面最常见的毛病是"越刷新越乱"。原则:数据层用固定间隔轮询,界面层只做增量更新;离开当前视图就停掉对应轮询,回来再恢复;请求用带超时的 AbortController,防止慢响应堆积。这几条原则组合起来,页面在弱网下也能保持稳定。
数据定时刷新时,整块 innerHTML 重绘会导致列表闪烁与滚动跳动。改进:行级对比 data-sig,未变化的 DOM 节点保持不变,只更新有差异的行,页面稳定很多。滚动位置也要单独保存与恢复,不然用户刷到一半就被弹回顶部。
systemd 服务、nohup + PID 文件、supervisor 各有适用场景。个人项目用 nohup + PID 文件最轻量:启动写 PID,重启用脚本先杀旧进程再起新进程,配合日志文件 >> log 2>&1 就能满足大部分需求。生产环境再换 systemd 也不迟。
Start-Process -WindowStyle Hidden 起后台服务,PID 写入文件便于下次 Stop;重启前先确认端口监听进程(Get-NetTCPConnection),避免旧进程占着端口导致新进程静默失败。还学会了用 Set-Content -Encoding utf8 正确处理中文日志编码。
编辑器:VS Code + Windows Terminal,配上代码检查插件,写 Python 和前端都够用。
服务器:阿里云 CentOS + 宝塔面板,日常操作图形化,复杂配置直接改 Nginx 配置文件。
同步部署:Git(Gitee 仓库)+ WebHook 自动部署,提交即上线。
调试习惯:先看日志 → 再抓原始接口 → 最后定位代码,三步走基本能解决九成问题。
2026-10-19:把一个拖了很久的接口稳定性问题解决了,原因是缓存结构读错了一层。越是看似简单的地方越容易藏 bug,记下来。
2026-10-17:今天把轮询从"整页刷新"改成"局部更新",页面顺滑了很多。改 UI 前先想清楚"什么必须动、什么别动",这个原则越来越有体会。
2026-10-15:给页面加文字直播,轮询频率和整页重绘打架,最后用"只替换局部卡片"解决。实时功能永远先想好刷新策略再做界面。
2026-10-13:把几台机器上重复的部署步骤整理成脚本,以后新环境五分钟就能跑起来,省下的时间都值得。
2026-10-09:第一次处理"数据源状态码延迟导致列表不同步"的问题,最后靠直接抓数据源原始接口对比才定位到,怀疑和日志一样重要。
2026-10-06:申请了域名并开始准备备案材料,第一次走完整个流程,比想象中繁琐但也不复杂。