Nginx 缓存 Ubuntu APT 源

发布时间: 更新时间: 总字数:841 阅读时间:2m 作者: IP上海 分享 网址

apt 源代理缓存配置

要求

  1. 针对性缓存策略:对 .deb 安装包长久缓存,对 Release/Packages 索引文件短期缓存。
  2. 源异常兜底 (Stale Cache):当上游官方源挂掉、超时或返回错误时,自动分发本地旧缓存,确保内网机器 apt install 不报错。
  3. 并发锁:防止多个客户端同时请求同一个大文件时击穿缓存。

准备工作

在服务器上创建缓存目录并赋予权限(假设 Nginx 运行用户为 www-data):

mkdir -p /var/cache/nginx/apt_proxy
chown -R www-data:www-data /var/cache/nginx/apt_proxy

Nginx 配置文件

可以将以下内容保存为 /etc/nginx/conf.d/apt_proxy.conf

此配置假设:

  • Nginx 监听 8080 端口(避免冲突)。
  • 主要代理 archive.ubuntu.comsecurity.ubuntu.com

应用配置

检查并重启 Nginx:

nginx -t
systemctl reload nginx

客户端如何使用 (Client Side)

在需要使用代理的 Ubuntu 机器上,修改 /etc/apt/sources.list

假设当前 Nginx 服务器 IP 是 192.168.1.100

  • 修改前 (原始):
deb http://archive.ubuntu.com/ubuntu/ jammy main restricted
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted
  • 修改后 (指向 Nginx):
# 注意:普通源直接指向 /ubuntu/
deb [arch=amd64] http://192.168.1.100:8080/ubuntu/ jammy main restricted universe multiverse
deb [arch=amd64] http://192.168.1.100:8080/ubuntu/ jammy-updates main restricted universe multiverse

# 注意:安全源指向 /ubuntu-security/ (对应 Nginx 配置中的 location)
deb [arch=amd64] http://192.168.1.100:8080/ubuntu-security/ jammy-security main restricted universe multiverse

关键逻辑解释

  1. 兜底逻辑 (proxy_cache_use_stale):

    • 这是最关键的一行。如果外网断了,或者 Ubuntu 官方源挂了,客户端请求 Packages.gz 时,Nginx 会发现上游报错,于是直接返回 cache 里的旧文件。
    • 虽然索引可能不是最新的,但保证了客户端还能安装旧版本的软件,不会直接报错停止。
  2. 强制缓存 (proxy_ignore_headers):

    • 默认情况下,APT 源的 HTTP 头可能包含 Cache-Control: max-age=0,Nginx 默认会遵守这个规则而不缓存。
    • 使用 proxy_ignore_headers 强制忽略上游的指令,完全由 Nginx 的 proxy_cache_valid 控制缓存时间。
  3. 区分文件类型:

    • .deb 文件内容永远不会变(版本号固定),所以设为 30d (30 天) 甚至更久。
    • Packages/Release 索引文件每天都会变,所以设为 1h 且开启 revalidate,确保能及时获取更新。
  4. 安全源重写:

    • 因为官方源分为 archivesecurity 两个域名,Nginx 作为一个 Server 块很难直接区分。
    • 在客户端 sources.list 里人为构造了一个 /ubuntu-security/ 路径,Nginx 收到后将其 rewrite 并代理到正确的 security.ubuntu.com
本文总阅读量 次 本站总访问量 次 本站总访客数
Home Archives Categories Tags Statistics