Nginx 可通过在 location 块中配置 index readme.md index.html; 并添加 types { text/markdown md; },使子目录(如 /docs/)优先返回 readme.md;需确保文件存在、权限可读,并避免与 try_files 冲突。

想让 Nginx 在访问子目录(比如 /docs/ 或 /project/)时自动返回 readme.md 而不是 index.html,关键不是改“默认首页名称”,而是把 readme.md 显式加入 index 指令,并确保它能被正确识别和响应。
把 readme.md 加进 index 列表
index 指令只管按顺序找文件,不挑后缀。只要文件真实存在,它就返回。
- 在对应 location 块里写:
index readme.md index.html; - 顺序很重要:Nginx 会先找
readme.md,存在就直接返回;不存在才继续找index.html - 如果只想对某个子目录生效(比如只对
/docs/),就把它写在location /docs/ { ... }里,避免影响其他路径
注册 .md 后缀的 MIME 类型
即使文件找到了,浏览器也可能下载它或显示乱码——因为 Nginx 默认不认识 .md,没设 Content-Type。
- 在
http、server或location块中添加:
types {
text/markdown md;
} - 推荐用
text/markdown,这是标准类型;若前端用 JS 渲染(如 VuePress),也可用text/plain或text/html,视实际加载方式而定 - 改完要重载配置:
nginx -s reload
确认文件存在且权限可读
Nginx 不会报错说“找不到 readme.md”,而是静默跳过,继续下一个;或者因权限问题返回 403。
- 检查物理路径:比如
root /var/www/site;,那/var/www/site/docs/readme.md必须真实存在 - 运行
ls -l /var/www/site/docs/readme.md,确保 Nginx 工作用户(如www-data或nginx)有读权限(-rw-r--r--或类似) - 测试命令:
curl -I http://localhost/docs/,看响应头里Content-Type是否为text/markdown
避免和 try_files 冲突
如果 location 里同时用了 try_files,要注意执行逻辑:
-
try_files $uri $uri/ =404;是安全的,$uri/会触发index查找 - 但
try_files $uri /readme.md;这类写法会绕过index,直接内部重定向到固定路径,失去“按目录查找”的灵活性 - 建议优先用
index+try_files $uri $uri/ =404;组合,清晰可控


















