Instalação de módulos de terceiros#
Além dos nossos próprios módulos dinâmicos para
Angie e Angie PRO,
coletamos e publicamos pacotes para uma série de módulos populares de terceiros compatíveis com nginx,
desenvolvidos fora da nossa empresa, em nosso repositório. Os pacotes de módulos de terceiros são instalados do nosso repositório assim como nossos próprios pacotes: Para usar o módulo instalado na configuração,
carregue-o usando a diretiva load_module no contexto Dica Os nomes dos pacotes e os próprios módulos na configuração têm os seguintes prefixos: Angie: Angie PRO: Nota Não revisamos o código-fonte desses módulos
e não somos responsáveis pelas consequências de sua instalação;
os pacotes são compilados com base em numerosas solicitações
exclusivamente para conveniência do usuário. Módulo Versão Pacotes Se o módulo de que você precisa não estiver na lista, você pode compilá-lo por
conta própria para o Angie ou o Angie PRO instalado a partir de nossos pacotes.
O Angie e o Angie PRO só carregam um módulo dinâmico se ele tiver sido
compilado: para o mesmo produto, Angie ou Angie PRO; para exatamente a mesma versão; com opções de compilação correspondentes. Nossos pacotes são compilados sem a opção Os passos usam o ngx-fancyindex
como exemplo: um módulo escolhido arbitrariamente que não está em nossa lista.
Outros módulos seguem os mesmos passos, com o endereço do repositório e os
nomes de módulo próprios, além das bibliotecas ou módulos que as instruções de
compilação deles exigirem. Não revisamos o código dos módulos compilados dessa forma e não somos
responsáveis pelas consequências de carregá-los. Instale o compilador, as bibliotecas com as quais o Angie é compilado e as
ferramentas para obter o código-fonte. No Debian e Ubuntu: No RHEL, Fedora e derivados, instale também o Somente para o Angie PRO: instale o No RHEL, Fedora e derivados: Baixe e descompacte o código-fonte do Angie da versão instalada. No caso do
Angie PRO, é o código-fonte do Angie da mesma versão; os arquivos do
Angie PRO são adicionados a ele no passo 6. O Angie PRO imprime a versão com
o sufixo Clone o repositório do módulo ao lado da árvore de código-fonte do Angie; no
exemplo, é o ngx-fancyindex: Configure a compilação com as opções do Angie ou do Angie PRO instalado,
adicionando o módulo. No RHEL, Fedora e derivados, defina antes as flags
padrão do compilador da distribuição, com as quais nossos pacotes também são
compilados, mas que Depois, em qualquer distribuição, execute: O eval faz o shell respeitar as aspas nas opções impressas, de
modo que valores com espaços não sejam divididos. O segundo sed
remove Se o ./configure falhar, corrija a causa (por exemplo, instalando
uma biblioteca ausente) e remova o diretório No RHEL, Fedora e derivados, quando um passo é omitido, a mensagem de erro
não diz qual foi: sem o Somente para o Angie PRO: substitua os arquivos de cabeçalho e a
configuração de compilação da árvore de código-fonte pelos do Angie PRO: O pacote reproduz a estrutura do diretório Compile o módulo: O resultado é o arquivo Instale o módulo: Tanto no Angie quanto no Angie PRO, carregue o módulo com a diretiva
load_module no contexto Se o módulo não corresponder ao Angie ou ao Angie PRO instalado, o
Cada nova versão do Angie ou do Angie PRO exige recompilar o módulo: ela
rejeita o módulo compilado para a versão anterior, com o erro de versão. Se o
serviço estiver em execução quando o pacote for atualizado para uma nova
versão, o pacote tenta passar o serviço, em tempo real, para o novo executável.
Com o módulo compilado para a versão anterior, o novo executável rejeita a
configuração, e por isso a troca não ocorre: o pacote imprime a mensagem
Depois da atualização, recompile e reinstale o módulo, reaproveitando o
código-fonte da primeira compilação: repita os passos 3 e 5 a 8, começando no
diretório em que você executou o passo 3 na primeira compilação; para o
Angie PRO, repita antes o passo 2. O último passo usa install, e não
cp, porque o install grava um arquivo novo em vez de
sobrescrever o que o serviço em execução carregou. Depois, reinicie o serviço
para que o novo executável inicie com o módulo recompilado: Aqui, um recarregamento não basta: ele é bem-sucedido, mas o executável em
execução continua usando a compilação do módulo que já carregou. Para passar ao
novo executável e ao módulo recompilado sem interromper o serviço, use uma
atualização de executável em tempo real em vez de
reiniciar.Instalação e configuração#
main:load_module modules/<module_name>.so;
angie-module-<name>angie-pro-module-<name>Lista de pacotes#
angie-module-auth-jwtangie-pro-module-auth-jwtangie-module-auth-ldapangie-pro-module-auth-ldapangie-module-auth-pamangie-pro-module-auth-pamangie-module-auth-spnegoangie-pro-module-auth-spnegoangie-module-auth-totpangie-pro-module-auth-totpangie-module-brotliangie-pro-module-brotliangie-module-cache-purgeangie-pro-module-cache-purgeangie-module-cgiangie-pro-module-cgiangie-module-combined-upstreamsangie-pro-module-combined-upstreamsangie-module-dav-extangie-pro-module-dav-extangie-module-dynamic-limit-reqangie-pro-module-dynamic-limit-reqangie-module-echoangie-pro-module-echoangie-module-enhanced-memcachedangie-pro-module-enhanced-memcachedangie-module-evalangie-pro-module-evalangie-module-geoip2angie-pro-module-geoip2angie-module-headers-moreangie-pro-module-headers-moreangie-module-http-auth-radiusangie-pro-module-http-auth-radiusangie-module-jwtangie-pro-module-jwtangie-module-keyvalangie-pro-module-keyvalangie-module-luaangie-pro-module-luaangie-module-modsecurityangie-pro-module-modsecurityangie-module-njsangie-pro-module-njsangie-module-ndkangie-pro-module-ndkangie-module-oidcangie-pro-module-oidcangie-module-opentracingangie-pro-module-opentracingangie-module-otelangie-pro-module-otelangie-module-postgresangie-pro-module-postgresangie-module-redis2angie-pro-module-redis2angie-module-rtmpangie-pro-module-rtmpangie-module-set-miscangie-pro-module-set-miscangie-module-subsangie-pro-module-subsangie-module-testcookieangie-pro-module-testcookieangie-module-unbrotliangie-pro-module-unbrotliangie-module-unzstdangie-pro-module-unzstdangie-module-uploadangie-pro-module-uploadangie-module-vodangie-pro-module-vodangie-module-vtsangie-pro-module-vtsangie-module-weserv-imagesangie-pro-module-weserv-imagesangie-module-zipangie-pro-module-zipangie-module-zstdangie-pro-module-zstdCompilação de um módulo para a versão em pacotes do Angie ou do Angie PRO#
--with-compat, por isso o
Angie e o Angie PRO instalados a partir deles rejeitam um módulo compilado com
as opções padrão do ./configure ou com --with-compat.
O procedimento abaixo compila um módulo que o Angie ou o Angie PRO instalado
a partir de pacotes carrega. Você não recompila nem substitui o próprio Angie
ou Angie PRO: o pacote continua instalado, e o módulo é compilado
separadamente e carregado nele. O módulo é compilado na árvore de código-fonte
do Angie da mesma versão do pacote instalado, com as opções de compilação
desse pacote. O Angie PRO é distribuído apenas em pacotes binários, sem
código-fonte, mas usa o mesmo sistema de compilação do Angie. Para compilar um
módulo para o Angie PRO, você usa a mesma árvore de código-fonte do Angie com
os arquivos de cabeçalho e a configuração de compilação do Angie PRO do pacote
angie-pro-headers.$ sudo apt install build-essential libpcre2-dev zlib1g-dev libssl-dev libcrypt-dev curl git
redhat-rpm-config,
que fornece as configurações do compilador com as quais nossos pacotes são
compilados:$ sudo dnf install gcc make pcre2-devel zlib-devel openssl-devel libxcrypt-devel redhat-rpm-config git
angie-pro-headers na mesma versão
do pacote angie-pro instalado. O pacote angie-pro-headers
instala os arquivos de cabeçalho e a configuração de compilação do
Angie PRO em /usr/include/angie-pro/. Ele vem do mesmo repositório
do angie-pro, e sua disponibilidade depende da licença. Ele não depende do angie-pro, portanto o
gerenciador de pacotes não faz as versões coincidirem; especifique a versão
explicitamente. No Debian e Ubuntu:$ sudo apt install "angie-pro-headers=$(dpkg-query -W -f='${Version}' angie-pro)"
$ sudo dnf install "angie-pro-headers-$(rpm -q --qf '%{VERSION}-%{RELEASE}' angie-pro)"
(PRO), que o primeiro comando descarta:$ VERSION=$(sudo angie -v 2>&1 | sed -n 's|^Angie version: Angie/\([0-9.]*\).*|\1|p')
$ echo "$VERSION"
1.12.4
$ curl -fsSO "https://download.pt.angie.software/files/angie-$VERSION.tar.gz"
$ tar -xzf "angie-$VERSION.tar.gz"
$ git clone https://github.com/aperezdc/ngx-fancyindex
angie -V não mostra:$ export CFLAGS="$(rpm --eval '%{optflags}')"
$ cd "angie-$VERSION"
$ eval ./configure $(sudo angie -V 2>&1 | sed -n 's/^configure arguments: //p' | sed 's/ --with-license//') \
--add-dynamic-module=../ngx-fancyindex
--with-license, com o qual alguns pacotes do Angie PRO são
compilados: o ./configure do Angie não conhece essa opção, e ela
afeta apenas o executável do Angie PRO, não o módulo. No Angie, as opções
não a contêm.../angie-feature-cache
antes de executá-lo novamente: as opções do pacote incluem
--feature-cache=../angie-feature-cache, por isso o
./configure salva ali as verificações que falharam e as relata na
próxima execução como using cached check ... not found.redhat-rpm-config, o ./configure
termina com the invalid value in --with-ld-opt="value" e, sem o
CFLAGS exportado, com
C99 variadic macros support is not found.$ cp -r /usr/include/angie-pro/. src/
$ cp src/objs/* objs/
src, por isso o primeiro
comando substitui os arquivos de cabeçalho. O subdiretório objs do
pacote, agora em src/objs, contém a configuração de compilação do
Angie PRO (ngx_auto_config.h e ngx_auto_headers.h); o
segundo comando copia esses arquivos para o diretório objs que o
./configure criou. Os dois comandos são necessários. Os arquivos
de cabeçalho dão ao módulo as estruturas e a assinatura de produto do
Angie PRO. A configuração de compilação define as opções com as quais o
módulo é compilado: o Angie PRO tem opções que o ./configure do
Angie não conhece, e um módulo compilado com a configuração do Angie não
corresponderia ao layout das estruturas do Angie PRO.$ make modules
objs/ngx_http_fancyindex_module.so.$ sudo install -m 644 objs/ngx_http_fancyindex_module.so /etc/angie/modules/
Carregamento e atualização#
main e depois verifique e recarregue a
configuração:load_module modules/ngx_http_fancyindex_module.so;
$ sudo angie -t && sudo systemctl reload angie
angie -t falha com uma mensagem que indica a incompatibilidade:module "file" was built for "Angie" but you are running "Angie PRO"
ou a mesma mensagem com os produtos trocados — o módulo foi compilado para o
outro produto;module "file" version module_version instead of angie_version —
o módulo foi compilado para outra versão; cada versão é impressa como um
único número inteiro, com a versão secundária e o número do patch
preenchidos com zeros à esquerda até três dígitos;module "file" is not binary compatible — o módulo foi compilado com
outras opções de compilação.Binary upgrade failed, e o executável anterior continua atendendo.$ sudo angie -t && sudo systemctl restart angie