Saltar a contenido

markdown: Módulo NGINX para convertir Markdown a HTML

Requiere el plan Pro (o superior) de la suscripción GetPageSpeed NGINX Extras.

Instalación

Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:

  • RedHat Enterprise Linux 7, 8, 9 y 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 y 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

Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:

load_module modules/ngx_markdown_filter_module.so;

Este documento describe nginx-module-markdown v1.0.0 lanzado el 15 de febrero de 2026.


Un módulo NGINX que transforma archivos Markdown a HTML al vuelo con soporte para YAML front matter, extensiones GFM y plantillas personalizables.

Construido sobre cmark-gfm (GitHub Flavored Markdown), este módulo permite servir documentación Markdown directamente desde NGINX con soporte completo para SEO a través de la extracción dinámica de metadatos.

Características

Característica Descripción
Conversión al vuelo Sirve archivos .md como HTML sin preprocesamiento
YAML front matter Extrae metadatos para títulos, descripciones y etiquetas SEO dinámicas
Sistema de plantillas Envuelve contenido en plantillas HTML personalizadas con sustitución de marcadores de posición
Extensiones GFM Tablas, tachado, listas de tareas, enlaces automáticos y filtrado de etiquetas
Sin dependencias en tiempo de ejecución Enlazado estáticamente, no se requieren servicios externos
Soporte para proxy Funciona con archivos markdown de upstream, no solo con archivos locales

Inicio Rápido

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

Referencia de Directivas

markdown_filter

Sintaxis markdown_filter on \| off;
Predeterminado off
Contexto location

Habilita o deshabilita la conversión de Markdown a HTML.


markdown_template

Sintaxis markdown_template <path>;
Predeterminado
Contexto location

Ruta a un archivo de plantilla HTML. Usa el marcador de posición {{content}} para insertar Markdown renderizado.


markdown_front_matter

Sintaxis markdown_front_matter on \| off;
Predeterminado off
Contexto location

Analiza el YAML front matter de los archivos Markdown para habilitar la sustitución de marcadores de posición en la plantilla.


markdown_unsafe

Sintaxis markdown_unsafe on \| off;
Predeterminado off
Contexto location

Permite el paso de HTML sin procesar en el contenido Markdown. Usar con precaución en entradas no confiables.


markdown_gfm_tagfilter

Sintaxis markdown_gfm_tagfilter on \| off;
Predeterminado off
Contexto location

Filtra etiquetas HTML peligrosas (<script>, <iframe>, <style>, etc.) de la salida.


markdown_gfm_tasklist

Sintaxis markdown_gfm_tasklist on \| off;
Predeterminado off
Contexto location

Habilita casillas de verificación de listas de tareas al estilo de GitHub: - [ ] y - [x].


markdown_gfm_strikethrough

Sintaxis markdown_gfm_strikethrough on \| off;
Predeterminado off
Contexto location

Habilita la sintaxis ~~tachado~~.


Sintaxis markdown_gfm_autolink on \| off;
Predeterminado off
Contexto location

Convierte automáticamente URLs y direcciones de correo electrónico en enlaces clicables.

Sistema de Plantillas

Las plantillas envuelven el Markdown renderizado en HTML personalizado. Usa {{content}} para marcar dónde aparece el Markdown convertido:

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

YAML Front Matter

Habilita markdown_front_matter para extraer metadatos de los archivos Markdown y sustituir dinámicamente los marcadores de posición de la plantilla. Esencial para la optimización SEO.

Ejemplo de Archivo Markdown

---
title: Guía de Inicio Rápido
meta:
  description: Aprende a instalar y configurar el módulo
  keywords: nginx, markdown, documentación
  robots: index, follow
author: Equipo de Documentación
---

## Guía de Inicio Rápido

Bienvenido a la documentación.

Ejemplo de Plantilla

<!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>

Características del Front Matter

  • Claves anidadas — Acceso con notación de punto: {{meta.description}}
  • Manejo de comillas — Las comillas alrededor se eliminan automáticamente
  • Fallback elegante — Los valores faltantes se renderizan como cadenas vacías
  • Compatible hacia atrás — Los archivos sin front matter funcionan normalmente

Extensiones GFM

Cuando se construye con cmark-gfm (predeterminado en los paquetes de GetPageSpeed), estas extensiones están disponibles:

Extensión Directiva Ejemplo
Tablas Siempre habilitado | A | B |
Tachado markdown_gfm_strikethrough on ~~eliminado~~
Listas de Tareas markdown_gfm_tasklist on - [x] Hecho
Enlaces Automáticos markdown_gfm_autolink on https://example.com
Filtro de Etiquetas markdown_gfm_tagfilter on Sanitiza <script>, <iframe>, etc.

Ejemplos de Configuración

Sitio de Documentación

Sirve documentación Markdown con metadatos SEO adecuados:

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

Blog con CMS de Upstream

Procesa Markdown desde un CMS sin cabeza:

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

Wiki con Contenido de Usuarios

Permite contenido contribuido por usuarios con sanitización de HTML:

location /wiki/ {
    markdown_filter on;
    markdown_unsafe on;
    markdown_gfm_tagfilter on;  # Permite HTML pero filtra etiquetas peligrosas
    markdown_template /etc/nginx/templates/wiki.html;
}

Configuración Completa

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;
}