Pular para conteúdo

ndk: Nginx Development Kit

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

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

load_module modules/ndk_http_module.so;

Este documento descreve o nginx-module-ndk v0.3.4 lançado em 20 de fevereiro de 2025.


O NDK é um módulo Nginx projetado para estender a funcionalidade principal do excelente servidor web Nginx de uma forma que pode ser usada como base para outros módulos Nginx.

Ele possui funções e macros para lidar com tarefas genéricas que atualmente não têm código genérico como parte da distribuição principal. O NDK em si adiciona poucos recursos que são vistos do ponto de vista do usuário - ele é projetado apenas para ajudar a reduzir o código que os desenvolvedores de módulos Nginx precisam escrever.

Desenvolvedores de módulos Nginx que desejam usar qualquer um dos recursos do NDK devem especificar que o NDK é uma dependência de seu módulo e que os usuários precisarão compilá-lo também ao compilar seus próprios módulos. Eles também precisarão declarar em seus próprios módulos quais recursos do NDK desejam usar (explicado abaixo).

Se você não é um desenvolvedor de módulos Nginx, então a única parte útil deste projeto será a seção 'uso para usuários' abaixo.

Recursos

  • funções conf_set adicionais para regexes, valores complexos/script, caminhos...
  • macros para simplificar tarefas como verificar valores NULL ao fazer ngx_array_push
  • patches para o código fonte principal
  • o manipulador de biblioteca externa genérico ngx_auto_lib_core está incluído (veja o readme separado)

Design

modular

O kit em si é projetado de forma modular, para que apenas o código necessário seja compilado. É possível adicionar apenas um único módulo NDK, alguns ou todos eles.

auto-gerado e facilmente extensível

Muitas das macros disponíveis no NDK são auto-geradas a partir de arquivos de configuração simples. Isso torna a criação de macros semelhantes para seu próprio código muito simples - geralmente é apenas uma questão de adicionar uma linha extra a um arquivo de configuração e reexecutar o script de compilação.

Uso para usuários

Se outro módulo Nginx que você deseja usar especifica que o NDK é uma dependência, você precisará fazer o seguinte:

  1. baixar o código-fonte (https://github.com/simpl/ngx_devel_kit)
  2. descompactar o código-fonte (tar -xzf $name)
  3. compilar o Nginx com a seguinte opção extra --add-module=/path/to/ngx_devel_kit.

ex.:

./configure --add-module=/path/to/ngx_devel_kit \
            --add-module=/path/to/another/module

Uso para desenvolvedores

Para usar o NDK em seu próprio módulo, você precisa adicionar o seguinte:

  1. adicione esta linha ao seu módulo
#include    <ndk.h>

Nota: como o NDK inclui as seguintes linhas

#include    <ngx_config.h>
#include    <ngx_core.h>
#include    <ngx_http.h>

você pode substituir essas linhas pela única inclusão acima. 2. adicione a seguinte linha no arquivo de configuração do seu módulo:

have=NDK_[module_name]  . auto/have

para cada módulo NDK que você deseja usar (você precisa incluir auto/have várias vezes se desejar usar múltiplos módulos NDK).

Nota: o antigo método de definir

CFLAGS="$CFLAGS -DNDK_[module_name]"

agora está obsoleto. Ele ainda funcionará, mas resulta em linhas desnecessárias sendo exibidas ao compilar o Nginx.

Aviso: Usando NDK_ALL

Você também pode definir NDK_ALL para incluir todos os módulos NDK. Isso é principalmente uma conveniência nas fases iniciais de desenvolvimento de outro módulo. No entanto,

NÃO DEIXE NDK_ALL NO SEU ARQUIVO DE CONFIGURAÇÃO AO PUBLICAR

Embora o NDK seja relativamente pequeno agora, ele pode, com o tempo, se tornar um grande repositório de código que, se usando NDK_ALL, resultará em consideravelmente mais código sendo compilado do que o necessário.

Módulos usando NDK

Os seguintes módulos de terceiros fazem uso do NDK.

Se você gostaria de adicionar seu módulo a esta lista, por favor, nos avise.

Agradecimentos Especiais

Um agradecimento especial vai para Yichun Zhang por ajudar a manter este módulo.

GitHub

Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-ndk.