用 Nginx 的 root 指令可快速搭建内网静态软件源,通过 root 设置基础路径、location 划分发行版目录,配合权限配置与客户端源地址替换即可生效。

用 Nginx 的 root 指令搭内网静态软件源,核心是让 Nginx 直接映射本地目录为 HTTP 可访问路径,无需后端、不走代理,部署快、维护轻。
明确目录结构与权限
软件源本质是按发行版规范组织的静态文件(如 Debian 的 Packages.gz、RPM 的 repodata)。先在服务器上准备好完整目录树,例如:
-
/var/www/mirror/debian/—— 放dists/和pool/ -
/var/www/mirror/centos/8/BaseOS/x86_64/—— 放repodata/和 RPM 包
确保 Nginx 工作用户(通常是 www-data 或 nginx)对这些路径有读取权限,必要时执行:chmod -R a+r /var/www/mirror
用 root 指令绑定路径
在 Nginx 配置中,直接用 root 定义基础路径,再用 location 划分不同源。例如:
server {
listen 80;
server_name mirror.local;
<pre class="brush:php;toolbar:false;">root /var/www/mirror;
location /debian/ {
autoindex on;
add_header Cache-Control "public, max-age=3600";
}
location /centos/ {
autoindex on;
add_header Cache-Control "public, max-age=7200";
}}
注意:root 后路径不带 trailing slash,location 路径末尾的 / 决定是否自动拼接——这里保留它,Nginx 会把请求 /debian/dists/ 映射到 /var/www/mirror/debian/dists/。
适配客户端配置
Debian/Ubuntu 用户修改 /etc/apt/sources.list,将官方源地址替换成内网地址:
deb http://mirror.local/debian bookworm main contrib non-free deb http://mirror.local/debian-security bookworm-security main
RHEL/CentOS 用户编辑 repo 文件,如 /etc/yum.repos.d/local.repo:
[baseos] name=CentOS $releasever - BaseOS baseurl=http://mirror.local/centos/$releasever/BaseOS/$basearch/ enabled=1 gpgcheck=0
记得运行 apt update 或 yum makecache 验证连通性和元数据完整性。
补充实用细节
内网源不是“扔完就跑”,几个关键点能避免踩坑:
- 启用
autoindex on方便人工核对目录内容,上线后可关掉 - 加
add_header控制缓存,避免客户端频繁重拉索引文件 - 若需 HTTPS,用 Let’s Encrypt 签发内网域名证书,或自建 CA 并在客户端信任
- 定期同步上游源(用
rsync或reposync),配合 cron 自动更新
不复杂但容易忽略:所有路径大小写、斜杠方向、目录层级必须和客户端预期完全一致,否则 apt/yum 会报 404 或 checksum 错误。










