跳转至

markdown: Markdown-to-html NGINX 模块

需要 GetPageSpeed NGINX Extras 订阅的 Pro 计划(或更高版本)。

安装

您可以在任何基于 RHEL 的发行版中安装此模块,包括但不限于:

  • RedHat Enterprise Linux 7、8、9 和 10
  • CentOS 7、8、9
  • AlmaLinux 8、9
  • Rocky Linux 8、9
  • Amazon Linux 2 和 Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-markdown
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-markdown

通过在 /etc/nginx/nginx.conf 的顶部添加以下内容来启用该模块:

load_module modules/ngx_markdown_filter_module.so;

本文档描述了 nginx-module-markdown v1.0.0,于 2026 年 2 月 15 日发布。


一个 NGINX 模块,可以动态将 Markdown 文件转换为 HTML,支持 YAML 前置信息、GFM 扩展和可自定义模板。

基于 cmark-gfm(GitHub 风格的 Markdown),该模块使得可以直接从 NGINX 提供 Markdown 文档,并通过动态元数据提取提供完整的 SEO 支持。

特性

特性 描述
动态转换 无需预处理即可将 .md 文件作为 HTML 提供
YAML 前置信息 提取元数据以动态生成标题、描述和 SEO 标签
模板系统 在自定义 HTML 模板中包装内容并进行占位符替换
GFM 扩展 表格、删除线、任务列表、自动链接和标签过滤
零运行时依赖 静态链接,无需外部服务
代理支持 支持上游 Markdown 文件,而不仅仅是本地文件

快速开始

location ~ \.md$ {
    markdown_filter on;
    markdown_template /etc/nginx/templates/page.html;
}

指令参考

markdown_filter

语法 markdown_filter on \| off;
默认 off
上下文 location

启用或禁用 Markdown 到 HTML 的转换。


markdown_template

语法 markdown_template <path>;
默认
上下文 location

HTML 模板文件的路径。使用 {{content}} 占位符插入渲染的 Markdown。


markdown_front_matter

语法 markdown_front_matter on \| off;
默认 off
上下文 location

从 Markdown 文件中解析 YAML 前置信息,以启用模板占位符替换。


markdown_unsafe

语法 markdown_unsafe on \| off;
默认 off
上下文 location

允许在 Markdown 内容中直接通过原始 HTML在不受信任的输入上使用时请谨慎。


markdown_gfm_tagfilter

语法 markdown_gfm_tagfilter on \| off;
默认 off
上下文 location

从输出中过滤危险的 HTML 标签(<script><iframe><style> 等)。


markdown_gfm_tasklist

语法 markdown_gfm_tasklist on \| off;
默认 off
上下文 location

启用 GitHub 风格的任务列表复选框:- [ ]- [x]


markdown_gfm_strikethrough

语法 markdown_gfm_strikethrough on \| off;
默认 off
上下文 location

启用 ~~strikethrough~~ 语法。


语法 markdown_gfm_autolink on \| off;
默认 off
上下文 location

自动将裸露的 URL 和电子邮件地址转换为可点击的链接。

模板系统

模板将渲染的 Markdown 包裹在自定义 HTML 中。使用 {{content}} 标记转换后的 Markdown 出现的位置:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Documentation</title>
    <link rel="stylesheet" href="/css/docs.css">
</head>
<body>
    <main>{{content}}</main>
</body>
</html>

YAML 前置信息

启用 markdown_front_matter 从 Markdown 文件中提取元数据,并动态替换模板占位符。这对于 SEO 优化至关重要。

示例 Markdown 文件

---
title: Getting Started Guide
meta:
  description: Learn how to install and configure the module
  keywords: nginx, markdown, documentation
  robots: index, follow
author: Documentation Team
---

## Getting Started

Welcome to the documentation.

示例模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>{{title}}</title>
    <meta name="description" content="{{meta.description}}">
    <meta name="keywords" content="{{meta.keywords}}">
    <meta name="robots" content="{{meta.robots}}">
    <meta name="author" content="{{author}}">
</head>
<body>
    <article>{{content}}</article>
</body>
</html>

前置信息特性

  • 嵌套键 — 使用点表示法访问:{{meta.description}}
  • 引号处理 — 周围的引号会自动去掉
  • 优雅回退 — 缺失的值呈现为空字符串
  • 向后兼容 — 没有前置信息的文件正常工作

GFM 扩展

使用 cmark-gfm 构建时(在 GetPageSpeed 包中默认),可用以下扩展:

扩展 指令 示例
表格 始终启用 | A | B |
删除线 markdown_gfm_strikethrough on ~~deleted~~
任务列表 markdown_gfm_tasklist on - [x] Done
自动链接 markdown_gfm_autolink on https://example.com
标签过滤 markdown_gfm_tagfilter on 清理 <script><iframe> 等。

示例配置

文档网站

提供带有适当 SEO 元数据的 Markdown 文档:

location /docs/ {
    markdown_filter on;
    markdown_front_matter on;
    markdown_template /etc/nginx/templates/docs.html;
    markdown_gfm_tasklist on;
    markdown_gfm_autolink on;
}

使用上游 CMS 的博客

处理来自无头 CMS 的 Markdown:

location /blog/ {
    proxy_pass http://cms-backend;
    markdown_filter on;
    markdown_front_matter on;
    markdown_template /etc/nginx/templates/blog.html;
}

用户内容的维基

允许用户贡献内容并进行 HTML 清理:

location /wiki/ {
    markdown_filter on;
    markdown_unsafe on;
    markdown_gfm_tagfilter on;  # 允许 HTML,但过滤危险标签
    markdown_template /etc/nginx/templates/wiki.html;
}

完整功能配置

location ~ \.md$ {
    markdown_filter on;
    markdown_front_matter on;
    markdown_template /etc/nginx/templates/docs.html;
    markdown_gfm_strikethrough on;
    markdown_gfm_tasklist on;
    markdown_gfm_autolink on;
    markdown_gfm_tagfilter on;
}