如何使用nginx动态生成指定目录下的README.txt文件?
解决方案
Nginx原生实现(无需额外工具)
Nginx本身原生支持该需求,无需引入JS等额外工具,直接通过配置即可实现动态返回README.txt内容,不需要在磁盘上存储多份重复的README文件。
配置步骤
- 首先在Nginx的http配置块中通过
map指令定义需要自动生成README.txt的目录列表,方便统一管理:
http { # 规则:匹配到对应目录前缀时,$need_generate_readme值为1,否则为0 map $uri $need_generate_readme { ~^/repo/ 1; ~^/repo-latest/ 1; # 后续新增目录只需要在此处加一行匹配规则即可 default 0; } server { listen 443 ssl; server_name www.some-web.com; # 替换为你的实际域名 root /your/path/to/www; # 替换为你站点www目录的实际绝对路径 # 拦截所有README.txt的请求 location ~ ^/(.*)/README\.txt$ { # 不在指定生成列表的目录,走正常静态文件逻辑 if ($need_generate_readme = 0) { try_files $uri =404; } # 设置返回内容类型为纯文本 default_type text/plain; # 动态拼接返回内容,$1为README.txt所在的目录路径,$host自动取当前域名 return 200 "This is README.txt. Download the file from https://$host/$1/some-files\n"; } # 你原有其他静态资源的配置保持不变即可 location / { try_files $uri $uri/ =404; } } }
- 配置修改完成后执行
nginx -s reload重载配置即可生效。
方案优势
- 全局仅需维护一份内容模板,修改后所有目录的README.txt自动同步更新,无需手动修改多份文件
- 目录列表统一在map块中管理,新增/删除生成目录仅需修改一行配置
- 完全使用Nginx核心模块功能,无需安装第三方扩展,对新手友好,配置门槛低
可选:本地批量生成实体文件方案
如果你需要在磁盘上真实存储每个目录的README.txt文件,可以使用简单的Shell脚本批量生成:
#!/bin/bash # 填写需要生成README.txt的目录绝对路径列表 TARGET_DIRS=( "/your/path/to/www/repo" "/your/path/to/www/repo-latest" ) # 填写内容模板,{DIR_PATH}为目录路径占位符 README_TEMPLATE="This is README.txt. Download the file from https://www.some-web.com/{DIR_PATH}/some-files" for dir in "${TARGET_DIRS[@]}"; do # 提取相对于www目录的路径 relative_path=${dir#*/www/} # 替换占位符生成最终内容 final_content=${README_TEMPLATE//\{DIR_PATH\}/$relative_path} # 写入文件 echo "$final_content" > "${dir}/README.txt" done
每次需要更新内容时,修改模板后执行一次脚本即可完成全量更新。
内容的提问来源于stack exchange,提问作者Payne
相关产品推荐
相关产品推荐

