此博客的系统架构和服务
对当前系统架构、Docker 容器编排及 Nginx 边缘网关配置的技术解析。
一、 拓扑架构设计
当前系统采用单节点边缘反向代理架构,核心在于网络平面隔离与收口管控。
- 流量入口 (OS 层面):宿主机仅在物理网卡暴露 HTTP(80) 和 HTTPS(443) 端口。所有外部请求必须经过宿主机网络栈,进入 Nginx 网关容器。
- 网络平面 (Docker 层面):建立了一个名为
global_web_net的全局自定义二层桥接网络。所有微服务容器(Nginx、Ghost、Linkding、Dufs)均接入此网络,实现内部通过 DNS 容器名(如ghost_blog:2368)互相解析与通信。 - 端口隔离机制:除 Nginx 容器外,后端的业务容器(Ghost、Linkding、Dufs)均未使用
ports指令将端口映射到宿主机,仅通过expose或默认暴露在内部网络。这从物理层面上阻断了绕过网关直接访问后端的可能。
二、 Docker 容器服务配置解析
各服务的 docker-compose.yml 遵循统一的云原生安全与资源隔离标准,主要体现为以下四个维度的设计:
- 内核级权限硬化 (Linux Capabilities)
- 全量服务启用
no-new-privileges:true,阻断 SUID/SGID 提权。 - 使用
cap_drop: - ALL剥离默认内核特权。 - 按需进行精准特权补偿:业务容器仅保留基础的权限变更能力(如
CHOWN,DAC_OVERRIDE),Nginx 网关额外保留绑定特权端口的能力(NET_BIND_SERVICE)。
- 全量服务启用
- Cgroups 硬件级资源锁定
- CPU:所有容器硬性限制为最多使用 0.5 核算力,防止单一故障服务引发“吵闹的邻居”效应,耗尽宿主机资源。
- 内存:按业务特征精准分配。Rust 开发的 Dufs 分配 128M;Python 的 Linkding 分配 256M;Node.js 的 Ghost 分配 400M;Nginx 分配 256M 上限及 64M 常驻预留。
- PID 1 进程托管与优雅停机
- 在 Ghost 和 Linkding 中显式配置了
init: true。这使得容器使用tini托管主进程,确保在接收到SIGTERM(如执行docker stop)时,能将信号正确传递给 Node.js/Python 进程及底层的 SQLite 数据库,保证数据安全落盘,防止数据库文件损坏。
- 在 Ghost 和 Linkding 中显式配置了
- 持久化与文件系统隔离
- 业务数据卷采用
:rw显式读写挂载。 - Nginx 的配置文件与 SSL 证书采用
:ro(只读)挂载,防止容器被攻破后反向篡改宿主机配置。
- 业务数据卷采用
三、 Nginx 边缘网关配置解析
Nginx 作为系统的中枢神经,承担了流量路由、协议卸载、连接池维护及安全防御职责。
- 全局限流与连接清洗 (
00_global.conf)- 启用 Gzip 静态资源压缩引擎(级别 5),降低带宽开销。
- 定义了每秒 5 次请求的限流区(
req_zone)与并发数为 5 的连接限制区(conn_zone),为后端服务提供防 CC 与防爬虫的基础屏障。
- 流量分发与虚拟主机路由
- HTTP 拦截器 (
01_http_redirect.conf):匹配全站 80 端口流量,执行 301 永久重定向至 HTTPS,强制实施加密传输。 - 主站与书签 (
main_domain.conf):承接liangzhantu.fun主域名,开启 WebSocket 双向协议升级支持(透传Upgrade头),匹配 Linkding 业务需求。 - 博客子站 (
blog.conf):承接blog子域名,调整client_max_body_size至 30M,以兼容 Ghost 媒体上传需求。 - 网盘子站 (
pan_domain.conf):承接pan子域名,放宽请求体至 100M,并严格调用limit_conn限制单 IP 并发连接数为 5,防止多线程下载工具榨干公网带宽。
- HTTP 拦截器 (
- 连接池与性能调优 (Upstream)
- 后端应用(如 Ghost、Linkding)采用
upstream块定义,并开启keepalive 32。 - 配合
Location块中的proxy_http_version 1.1与Connection "",强制 Nginx 与后端容器保持长连接,消除频繁的 TCP 三次握手开销。
- 后端应用(如 Ghost、Linkding)采用
- 高级安全策略 (
security.snippet)- TLS 协议裁剪:仅放行 TLSv1.2 与 TLSv1.3,应用现代高强度加密套件(ECDHE, AES-GCM, CHACHA20),启用 10MB 共享会话缓存以加速 TLS 握手。
- 安全响应头:注入
X-Frame-Options(防点击劫持)、X-Content-Type-Options(防 MIME 嗅探)、X-XSS-Protection等安全首部,提升客户端浏览器的防御等级。