nginx可通过ssi在静态html中嵌入动态内容,需启用ssi模块、配置ssi on及ssi_types,并用语法调用echo、include等指令;file读磁盘文件,virtual发起内部子请求,后者须配合internal location实现动态接口嵌入。

Nginx 本身不执行服务端脚本(如 PHP),但可以通过 SSI(Server Side Includes)在静态 HTML 中“插入”动态内容,比如当前时间、文件内容、环境变量,甚至代理其他后端响应。关键在于 Nginx 需要启用 SSI 模块并正确配置,且 HTML 文件需以特定方式标记和响应。
启用 SSI 并设置响应头
SSI 默认不生效,必须显式开启。在 location 块中添加以下指令:
- ssi on; — 启用 SSI 解析
- ssi_silent_errors off; — 出错时显示提示(开发阶段建议开启)
- ssi_types text/html; — 指定哪些 MIME 类型允许解析 SSI(默认只处理 text/html,若用 .shtml 可省略)
- add_header Content-Type "text/html; charset=utf-8"; — 确保浏览器正确识别编码(尤其含中文时)
HTML 中使用标准 SSI 语法
在 HTML 文件中用 注释语法嵌入指令。常见用法有:
- — 输出本地时间
- — 包含同目录下的静态文件(相对路径)
- — 通过 internal location 代理请求(需配合 upstream 或 proxy_pass)
- — 定义并输出变量
注意:file 是读取磁盘文件,virtual 是发起一次内部子请求(可指向另一个 location),后者更常用于嵌入动态接口返回内容。
配合 internal location 实现动态嵌入
想把后端 API 的 JSON 或纯文本结果直接嵌入 HTML?不能直接 include virtual="/api/data",除非该 location 被声明为 internal,且返回 plain/text 或 text/html:
- 定义一个 internal 接口 location:
location = /api/time {
internal;
proxy_pass http://127.0.0.1:8000/time; # 或用 return 指令模拟
} - 在 HTML 中调用:
- 确保后端响应头不含
Content-Encoding: gzip(SSI 不解压),且Content-Type在ssi_types列表中
注意事项与常见问题
SSI 是轻量级方案,适合简单场景,但有明确限制:
- 不支持条件判断(如 if/else)、循环等逻辑 —— 若需复杂控制,应换用模板引擎或服务端渲染
- 文件包含(
file)路径基于 document_root,不能跨目录(../会被拒绝) - 嵌入内容不会被缓存(除非整个页面被缓存且 SSI 已解析完成),但子请求本身可单独配置缓存
- 调试时查看 Nginx error log,常见错误如 “SSI include not found”、“no suitable filter” 多因 MIME 类型不匹配或未开启 ssi
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










