Pular para conteúdo

markdown: Módulo NGINX para Markdown-to-html

Requer o plano Pro (ou superior) da assinatura GetPageSpeed NGINX Extras.

Instalação

Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:

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

Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:

load_module modules/ngx_markdown_filter_module.so;

Este documento descreve nginx-module-markdown v1.0.0 lançado em 15 de fevereiro de 2026.


Um módulo NGINX que transforma arquivos Markdown em HTML em tempo real com suporte para YAML front matter, extensões GFM e templates personalizáveis.

Construído sobre cmark-gfm (GitHub Flavored Markdown), este módulo permite servir documentação Markdown diretamente do NGINX com suporte completo para SEO através da extração dinâmica de metadados.

Recursos

Recurso Descrição
Conversão em tempo real Sirva arquivos .md como HTML sem pré-processamento
YAML front matter Extraia metadados para títulos dinâmicos, descrições e tags SEO
Sistema de templates Envolva o conteúdo em templates HTML personalizados com substituição de placeholders
Extensões GFM Tabelas, tachado, listas de tarefas, autolinks e filtragem de tags
Zero dependências em tempo de execução Linkado estaticamente, sem serviços externos necessários
Suporte a proxy Funciona com arquivos markdown upstream, não apenas arquivos locais

Início Rápido

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

Referência de Diretivas

markdown_filter

Sintaxe markdown_filter on \| off;
Padrão off
Contexto location

Habilita ou desabilita a conversão de Markdown para HTML.


markdown_template

Sintaxe markdown_template <caminho>;
Padrão
Contexto location

Caminho para um arquivo de template HTML. Use o placeholder {{content}} para inserir o Markdown renderizado.


markdown_front_matter

Sintaxe markdown_front_matter on \| off;
Padrão off
Contexto location

Analisa o YAML front matter de arquivos Markdown para habilitar a substituição de placeholders de template.


markdown_unsafe

Sintaxe markdown_unsafe on \| off;
Padrão off
Contexto location

Permite a passagem de HTML bruto no conteúdo Markdown. Use com cautela em entradas não confiáveis.


markdown_gfm_tagfilter

Sintaxe markdown_gfm_tagfilter on \| off;
Padrão off
Contexto location

Filtra tags HTML perigosas (<script>, <iframe>, <style>, etc.) da saída.


markdown_gfm_tasklist

Sintaxe markdown_gfm_tasklist on \| off;
Padrão off
Contexto location

Habilita caixas de seleção de listas de tarefas no estilo GitHub: - [ ] e - [x].


markdown_gfm_strikethrough

Sintaxe markdown_gfm_strikethrough on \| off;
Padrão off
Contexto location

Habilita a sintaxe ~~strikethrough~~.


Sintaxe markdown_gfm_autolink on \| off;
Padrão off
Contexto location

Converte automaticamente URLs e endereços de e-mail em links clicáveis.

Sistema de Templates

Templates envolvem o Markdown renderizado em HTML personalizado. Use {{content}} para marcar onde o Markdown convertido aparece:

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

YAML Front Matter

Habilite markdown_front_matter para extrair metadados de arquivos Markdown e substituir placeholders de template dinamicamente. Essencial para otimização de SEO.

Exemplo de Arquivo Markdown

---
title: Guia de Introdução
meta:
  description: Aprenda como instalar e configurar o módulo
  keywords: nginx, markdown, documentação
  robots: index, follow
author: Equipe de Documentação
---

## Introdução

Bem-vindo à documentação.

Exemplo de Template

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

Recursos do Front Matter

  • Chaves aninhadas — Acesse com notação de ponto: {{meta.description}}
  • Tratamento de aspas — Aspas ao redor são automaticamente removidas
  • Fallback gracioso — Valores ausentes são renderizados como strings vazias
  • Compatível com versões anteriores — Arquivos sem front matter funcionam normalmente

Extensões GFM

Quando construído com cmark-gfm (padrão nos pacotes GetPageSpeed), estas extensões estão disponíveis:

Extensão Diretiva Exemplo
Tabelas Sempre habilitado | A | B |
Tachado markdown_gfm_strikethrough on ~~deletado~~
Listas de Tarefas markdown_gfm_tasklist on - [x] Feito
Autolinks markdown_gfm_autolink on https://example.com
Filtro de Tags markdown_gfm_tagfilter on Sanitiza <script>, <iframe>, etc.

Exemplos de Configurações

Site de Documentação

Sirva documentação Markdown com metadados SEO adequados:

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 com CMS Upstream

Processar Markdown de um CMS sem cabeça:

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

Wiki com Conteúdo de Usuário

Permitir conteúdo contribuído por usuários com sanitização de HTML:

location /wiki/ {
    markdown_filter on;
    markdown_unsafe on;
    markdown_gfm_tagfilter on;  # Permitir HTML, mas filtrar tags perigosas
    markdown_template /etc/nginx/templates/wiki.html;
}

Configuração 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;
}