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:
- baixar o código-fonte (https://github.com/simpl/ngx_devel_kit)
- descompactar o código-fonte (tar -xzf $name)
- 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:
- 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.
- ngx_http_lua_module
- ngx_http_set_misc_module
- ngx_http_encrypted_session_module
- ngx_http_form_input_module
- ngx_http_iconv_module
- ngx_http_array_var_module
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.