You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx能否基于文件名模式自动指向最新版本安装包作为下载链接?

Nginx能否基于文件名模式自动指向最新版本安装包作为下载链接?

当然可以!不用每次手动创建软链接这么麻烦,咱们有两种实用方法能让Nginx自动帮你搞定这个需求:

方法一:定时脚本+软链接(原生Nginx就能用)

这个方案简单接地气,不用给Nginx装额外模块,核心是用脚本自动更新软链接:

  • 先写个shell脚本,让它自动找到目录里最新的app-installer X.X.exe文件,然后把app-installer.exe软链接指向它:
#!/bin/bash
# 替换成你的安装包存放目录
INSTALLER_DIR="/usr/share/nginx/html/installers"
# 按修改时间排序,取最新的那个安装包
LATEST=$(ls -t "$INSTALLER_DIR"/app-installer*.exe | head -n1)
# 更新软链接,-f参数会覆盖已存在的链接
ln -sf "$LATEST" "$INSTALLER_DIR"/app-installer.exe
  • 之后用crontab给这个脚本加个定时任务,比如每小时跑一次(或者每次上传完手动执行脚本也行),这样新安装包一上传,软链接就自动更新了
  • Nginx配置不用改,还是像之前一样指向app-installer.exe就行,用户访问的时候自然就拿到最新版本了

方法二:用Lua模块实现纯Nginx自动处理

如果你的Nginx已经装了ngx_http_lua_module(很多Linux发行版的官方Nginx包都带这个模块,编译的时候也能加上),可以直接在配置里写逻辑,不用依赖外部脚本:

  • 示例配置如下,把路径换成你的安装包目录就行:
location /app-installer.exe {
    content_by_lua_block {
        -- 替换成安装包实际存放的目录
        local installer_dir = "/usr/share/nginx/html/installers"
        local latest_file = nil
        local highest_version = 0

        -- 遍历目录下所有符合命名规则的安装包
        for file_path in io.popen("ls -1 " .. installer_dir .. "/app-installer*.exe"):lines() do
            -- 从文件名里提取版本号,比如从"app-installer 1.12.exe"拿到"1.12"
            local version_str = string.match(file_path, "app%-installer (%d+%.%d+)%.exe")
            if version_str then
                -- 把版本号转成数字方便比较(比如1.12转成112,1.3转成103)
                local version_num = tonumber(string.gsub(version_str, "%.", ""))
                if version_num > highest_version then
                    highest_version = version_num
                    latest_file = file_path
                end
            end
        end

        if latest_file then
            -- 提取文件名,重定向到最新安装包
            local file_name = string.match(latest_file, "/([^/]+)$")
            ngx.redirect("/installers/" .. file_name)
        else
            -- 没找到匹配的安装包就返回404
            ngx.exit(404)
        end
    }
}
  • 这个配置会在用户访问/app-installer.exe时,自动遍历目录找版本号最高的安装包,然后重定向到它,完全不用手动干预
  • 注意要确保Nginx进程有读取安装包目录的权限,另外如果你的系统里ls命令路径特殊,可能要写成/bin/ls这种绝对路径

两种方案各有优势:第一种简单易维护,适合不想折腾Nginx配置的朋友;第二种更“全自动”,不用依赖定时任务,适合喜欢纯配置解决问题的场景。

备注:内容来源于stack exchange,提问作者frogatto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 14:05:27