Como compilar o Nginx da fonte no Debian 10

Introdução

O Nginx é um software de servidor web de código aberto projetado com alta simultaneidade, que pode ser usado como servidor HTTP / HTTPS, servidor proxy reverso, servidor proxy de email, balanceador de carga de software, balanceador de carga de software, terminador TLS, servidor de cache e muito mais!

É um software muito modular. Mesmo algumas das partes aparentemente "integradas" do software, como GZIP ou SSL, são realmente criadas como módulos que podem ser ativados e desativados durante o tempo de compilação.

Possui módulos principais (nativos) e módulos de terceiros (externos) criados pela comunidade. No momento, existem mais de cem módulos de terceiros que podemos utilizar.

Escrito em C, é um software rápido e leve.

Instalar o Nginx a partir do código-fonte é relativamente fácil - faça o download da versão mais recente do código-fonte do Nginx, configure, construa e instale.

Você precisará escolher se deseja fazer o download da linha principal ou de uma versão estável, mas construí-las é a mesma.

Neste guia, compilaremos uma versão principal do Nginx no Debian 10 (buster). Usaremos todos os módulos disponíveis na versão de código aberto do Nginx.

Por que compilar e instalar o Nginx a partir da fonte

Você provavelmente pergunta por que alguém compila o Nginx a partir de uma fonte quando pode usar pacotes preparados. Aqui estão algumas razões pelas quais você pode compilar software específico:

  • Para controlar as opções de configuração.
  • Para instalar o software em qualquer lugar que você quiser. Você pode até instalar várias versões diferentes do mesmo software.
  • Para controlar a versão que você instala. As distribuições nem sempre se mantêm atualizadas com as versões mais recentes de todos os pacotes, principalmente os complementos de pacotes de software.
  • Para entender melhor como o software funciona.

Versão estável vs. versão principal

O Nginx Open Source está disponível em duas versões:

  • Mainline - Inclui os recursos mais recentes e correções de bugs e está sempre atualizado. É confiável, mas pode incluir alguns módulos experimentais e também pode ter alguns novos bugs.
  • Estável - Não inclui todos os recursos mais recentes, mas possui correções críticas de erros que são sempre suportadas para a versão principal.

Módulos principais vs. módulos de terceiros

O Nginx possui dois tipos de módulos que você pode utilizar: módulos principais e módulos de terceiros.

Os principais desenvolvedores do Nginx constroem módulos principais e fazem parte do próprio software.

A comunidade cria módulos de terceiros e você pode usá-los para estender a funcionalidade. Existem muitos módulos de terceiros úteis.

Módulos estáticos vs. módulos dinâmicos

Existem módulos estáticos no Nginx desde a primeira versão. Os módulos dinâmicos foram introduzidos com o Nginx 1.9.11+ em fevereiro de 2016.

Com módulos estáticos, um conjunto de módulos que constituem um binário Nginx é corrigido em tempo de compilação pelo ./configurescript. Módulos estáticos usam --with-foo_bar_moduleou --add-module=PATHsintaxe.

Para compilar um módulo principal (padrão) como dinâmico, adicionamos =dynamic, por exemplo --with-http_image_filter_module=dynamic.

Para compilar um módulo de terceiros como dinâmico, usamos a --add-dynamic-module=/path/to/modulesintaxe e os carregamos usando a load_modulediretiva no contexto global do nginx.confarquivo.

Requisitos para a criação do Nginx a partir da origem

Em comparação com outros softwares UNIX / Linux, o Nginx é bastante leve e não possui muitas dependências de bibliotecas. A configuração de compilação padrão depende de apenas 3 bibliotecas a serem instaladas: OpenSSL / LibreSSL / BoringSSL, Zlib e PCRE.

NOTA : O Nginx também pode ser compilado nas bibliotecas de criptografia LibreSSL e BoringSSL, em vez do OpenSSL.

Antes de você começar

Verifique a versão do Debian.

lsb_release -ds
# Debian GNU/Linux 10 (buster)

Crie um usuário comum com sudoacesso.

adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe

NOTA : Substitua johndoepelo seu nome de usuário .

Mude para um novo usuário.

su - johndoe

Configure o fuso horário.

sudo dpkg-reconfigure tzdata

Atualize o software do seu sistema operacional.

sudo apt update && sudo apt upgrade -y

Instale os pacotes necessários.

sudo apt install -y software-properties-common ufw

Compile o Nginx a partir da fonte

O Nginx é um programa escrito em C, então você primeiro precisará instalar uma ferramenta de compilação. Instalar build-essential, gite tree.

sudo apt install -y build-essential git tree

Baixe a versão principal mais recente do código-fonte do Nginx e descompacte o arquivo de código-fonte. O código fonte do Nginx é distribuído como um arquivo compactado, como a maioria dos softwares Unix e Linux.

wget https://nginx.org/download/nginx-1.17.2.tar.gz && tar zxvf nginx-1.17.2.tar.gz

Faça o download do código fonte das dependências obrigatórias do Nginx e extraia-o.

# PCRE version 8.43
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz && tar xzvf pcre-8.43.tar.gz

# zlib version 1.2.11
wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz

# OpenSSL version 1.1.1c
wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz && tar xzvf openssl-1.1.1c.tar.gz

Instale dependências opcionais do Nginx.

sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev

Limpe todos os .tar.gzarquivos. Não precisamos mais deles.

rm -rf *.tar.gz

Digite o diretório de origem Nginx.

cd ~/nginx-1.17.2

Para uma boa medida, liste os diretórios e arquivos que compõem o código-fonte do Nginx tree.

tree -L 2 .

Copie a página do manual para /usr/share/man/man8/.

sudo cp ~/nginx-1.17.2/man/nginx.8 /usr/share/man/man8
sudo gzip /usr/share/man/man8/nginx.8
ls /usr/share/man/man8/ | grep nginx.8.gz
# Check that man page for Nginx is working
man nginx

Para obter ajuda, você pode ver uma lista completa das opções atualizadas de tempo de compilação do Nginx executando o seguinte.

./configure --help
# To see want core modules can be built as dynamic run:
./configure --help | grep -F =dynamic

Configure, compile e instale o Nginx.

./configure --prefix=/etc/nginx \
            --sbin-path=/usr/sbin/nginx \
            --modules-path=/usr/lib/nginx/modules \
            --conf-path=/etc/nginx/nginx.conf \
            --error-log-path=/var/log/nginx/error.log \
            --pid-path=/var/run/nginx.pid \
            --lock-path=/var/run/nginx.lock \
            --user=nginx \
            --group=nginx \
            --build=Debian \
            --builddir=nginx-1.17.2 \
            --with-select_module \
            --with-poll_module \
            --with-threads \
            --with-file-aio \
            --with-http_ssl_module \
            --with-http_v2_module \
            --with-http_realip_module \
            --with-http_addition_module \
            --with-http_xslt_module=dynamic \
            --with-http_image_filter_module=dynamic \
            --with-http_geoip_module=dynamic \
            --with-http_sub_module \
            --with-http_dav_module \
            --with-http_flv_module \
            --with-http_mp4_module \
            --with-http_gunzip_module \
            --with-http_gzip_static_module \
            --with-http_auth_request_module \
            --with-http_random_index_module \
            --with-http_secure_link_module \
            --with-http_degradation_module \
            --with-http_slice_module \
            --with-http_stub_status_module \
            --with-http_perl_module=dynamic \
            --with-perl_modules_path=/usr/share/perl/5.26.1 \
            --with-perl=/usr/bin/perl \
            --http-log-path=/var/log/nginx/access.log \
            --http-client-body-temp-path=/var/cache/nginx/client_temp \
            --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
            --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
            --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
            --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
            --with-mail=dynamic \
            --with-mail_ssl_module \
            --with-stream=dynamic \
            --with-stream_ssl_module \
            --with-stream_realip_module \
            --with-stream_geoip_module=dynamic \
            --with-stream_ssl_preread_module \
            --with-compat \
            --with-pcre=../pcre-8.43 \
            --with-pcre-jit \
            --with-zlib=../zlib-1.2.11 \
            --with-openssl=../openssl-1.1.1c \
            --with-openssl-opt=no-nextprotoneg \
            --with-debug

make
sudo make install

Após a compilação, navegue até o ~diretório home ( ).

cd ~

Link simbólico /usr/lib/nginx/modulespara /etc/nginx/modules. Este é um local padrão para os módulos Nginx.

sudo ln -s /usr/lib/nginx/modules /etc/nginx/modules

Imprima a versão do Nginx, a versão do compilador e configure os parâmetros do script.

sudo nginx -V

# nginx version: nginx/1.17.2 (Debian)
# built by gcc 8.3.0 (Debian 8.3.0-6)
# built with OpenSSL 1.1.1c  28 May 2019
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules . . .
# . . .
# . . .

Crie um grupo de sistema e usuário do Nginx.

sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginx
# Check that user and group are created
sudo tail -n 1 /etc/passwd /etc/group /etc/shadow

Verifique a sintaxe do Nginx e possíveis erros.

sudo nginx -t
# Will throw this error -> nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (2: No such file or directory)

# Create NGINX cache directories and set proper permissions
sudo mkdir -p /var/cache/nginx/client_temp /var/cache/nginx/fastcgi_temp /var/cache/nginx/proxy_temp /var/cache/nginx/scgi_temp /var/cache/nginx/uwsgi_temp
sudo chmod 700 /var/cache/nginx/*
sudo chown nginx:root /var/cache/nginx/*

# Re-check syntax and potential errors. 
sudo nginx -t

Crie um arquivo de unidade do sistema Nginx.

sudo vim /etc/systemd/system/nginx.service

Preencha o /etc/systemd/system/nginx.servicearquivo com o seguinte conteúdo.

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

Habilite o Nginx para iniciar na inicialização e inicie o Nginx imediatamente.

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

Verifique se o Nginx será iniciado automaticamente após uma reinicialização.

sudo systemctl is-enabled nginx.service
# enabled

Verifique o status.

sudo systemctl status nginx.service

NOTA : Você pode verificar se o Nginx está em execução acessando o domínio ou endereço IP do seu site em um navegador da web. Você verá a página de boas-vindas do Nginx. Isso é um indicador de que o Nginx está funcionando no seu VPS.

Crie um perfil de aplicativo UFW Nginx.

sudo vim /etc/ufw/applications.d/nginx

Copie / cole o seguinte conteúdo no /etc/ufw/applications.d/nginxarquivo.

[Nginx HTTP]
title=Web Server (Nginx, HTTP)
description=Small, but very powerful and efficient web server
ports=80/tcp

[Nginx HTTPS]
title=Web Server (Nginx, HTTPS)
description=Small, but very powerful and efficient web server
ports=443/tcp

[Nginx Full]
title=Web Server (Nginx, HTTP + HTTPS)
description=Small, but very powerful and efficient web server
ports=80,443/tcp

Valide se os perfis de aplicativos UFW são criados e reconhecidos.

sudo ufw app list

# Available applications:
  # Nginx Full
  # Nginx HTTP
  # Nginx HTTPS
  # OpenSSH

O Nginx, por padrão, gera .defaultarquivos de backup no Windows /etc/nginx. Remova os .defaultarquivos do /etc/nginxdiretório.

sudo rm /etc/nginx/*.default

Coloque o realce da sintaxe da configuração do Nginx para o editor Vim ~/.vim.

# For regular non-root user
mkdir ~/.vim/
cp -r ~/nginx-1.17.2/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.17.2/contrib/vim/* /root/.vim/

NOTA : Ao executar a etapa acima, você obterá uma boa sintaxe destacada ao editar os arquivos de configuração do Nginx no editor do Vim.

Criar conf.d, snippets, sites-availablee sites-enableddiretórios /etc/nginx.

sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}

Altere as permissões e a propriedade do grupo dos arquivos de log do Nginx.

sudo chmod 640 /var/log/nginx/*
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log

Crie uma configuração de rotação de log para o Nginx.

sudo vim /etc/logrotate.d/nginx

Preencha o arquivo com o texto a seguir, salve e saia.

/var/log/nginx/*.log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 640 nginx adm
    sharedscripts
    postrotate
            if [ -f /var/run/nginx.pid ]; then
                    kill -USR1 `cat /var/run/nginx.pid`
            fi
    endscript
}

Remova todos os arquivos baixados do diretório inicial.

cd ~
rm -rf nginx-1.17.2/ openssl-1.1.1c/ pcre-8.43/ zlib-1.2.11/

Sumário

É isso aí. Agora, você tem a versão mais recente do Nginx instalada. É compilado estaticamente em algumas bibliotecas importantes como o OpenSSL. Freqüentemente, a versão do OpenSSL fornecida pelo sistema está desatualizada. Usando esse método de instalação com uma versão mais recente do OpenSSL, você pode tirar proveito de cifras modernas CHACHA20_POLY1305e protocolos como o TLS 1.3, disponíveis no OpenSSL 1.1.1. Além disso, ao compilar seu próprio binário, você pode personalizar a funcionalidade que o Nginx fornecerá, o que é muito mais flexível do que instalar um binário pré-construído.



Leave a Comment

Configure sua própria rede privada com o OpenVPN

Configure sua própria rede privada com o OpenVPN

O Vultr oferece uma incrível conectividade de rede privada para servidores executando no mesmo local. Mas às vezes você quer dois servidores em países diferentes

Como instalar o Couch CMS 2.0 em um VPS Debian 9 LAMP

Como instalar o Couch CMS 2.0 em um VPS Debian 9 LAMP

Usando um sistema diferente? O Couch CMS é um sistema de gerenciamento de conteúdo (CMS) simples e flexível, gratuito e de código aberto que permite que os web designers

Como usar o Sudo no Debian, CentOS e FreeBSD

Como usar o Sudo no Debian, CentOS e FreeBSD

Usar um usuário sudo para acessar um servidor e executar comandos no nível raiz é uma prática muito comum entre o Linux e o Unix Systems Administrator. O uso de um sud

Configurando um Chroot no Debian

Configurando um Chroot no Debian

Este artigo ensinará como configurar uma prisão chroot no Debian. Presumo que você esteja usando o Debian 7.x. Se você estiver executando o Debian 6 ou 8, isso pode funcionar, mas

Como instalar o PiVPN no Debian

Como instalar o PiVPN no Debian

Introdução Uma maneira fácil de configurar um servidor VPN no Debian é com o PiVPN. PiVPN é um instalador e wrapper para o OpenVPN. Ele cria comandos simples para você t

Como instalar o Kanboard no Debian 9

Como instalar o Kanboard no Debian 9

Usando um sistema diferente? Introdução O Kanboard é um programa de software de gerenciamento de projetos gratuito e de código aberto, projetado para facilitar e visualizar

Como instalar o Neos CMS no Debian 9

Como instalar o Neos CMS no Debian 9

Usando um sistema diferente? Neos é uma plataforma de aplicativos de conteúdo com um CMS e uma estrutura de aplicativos em seu núcleo. Este guia mostra como instalar

Configurar cactos no Debian Jessie

Configurar cactos no Debian Jessie

Introdução O Cacti é uma ferramenta de monitoramento e gráfico de código aberto totalmente baseada em dados RRD. Através do Cacti, você pode monitorar quase qualquer tipo de dispositivo

Como instalar o Java 8 e o DCEVM no Debian 8 (Jessie)

Como instalar o Java 8 e o DCEVM no Debian 8 (Jessie)

Java é uma linguagem de programação independente de plataforma / máquina virtual. Neste tutorial, instalaremos a implementação OpenJDK do Java 8 em um Debian

Servidor HTTP Git com Nginx no Debian 8

Servidor HTTP Git com Nginx no Debian 8

O Git é um sistema de controle de versão (VCS) que permite o rastreamento de alterações no código. Neste tutorial, mostraremos a instalação de um servidor HTTP (S) Git, um

Como instalar o MyCLI no Linux (CentOS, Debian, Fedora e Ubuntu)

Como instalar o MyCLI no Linux (CentOS, Debian, Fedora e Ubuntu)

Introdução O MyCLI é um cliente de linha de comando para MySQL e MariaDB que permite concluir automaticamente e ajuda na sintaxe de seus comandos SQL. MyCL

Usando vistas MySQL no Debian 7

Usando vistas MySQL no Debian 7

Introdução O MySQL possui um ótimo recurso conhecido como views. As visualizações são consultas armazenadas. Pense neles como um alias para uma consulta longa. Neste guia,

Como instalar o Matomo Analytics no Debian 9

Como instalar o Matomo Analytics no Debian 9

Usando um sistema diferente? O Matomo (anteriormente Piwik) é uma plataforma de análise de código aberto, uma alternativa aberta ao Google Analytics. Fonte Matomo está hospedado o

Monitorar o status do servidor Debian com o Munin

Monitorar o status do servidor Debian com o Munin

Munin é uma ferramenta de monitoramento para pesquisar processos e recursos em sua máquina e apresenta as informações em gráficos através de uma interface da web. Use o seguinte

Como instalar o fórum NodeBB no Debian 9

Como instalar o fórum NodeBB no Debian 9

Usando um sistema diferente? O NodeBB é um fórum baseado no Node.js. Ele utiliza soquetes da web para interações instantâneas e notificações em tempo real. Código fonte do NodeBB i

Como configurar o Samba com armazenamento em bloco no Debian 9

Como configurar o Samba com armazenamento em bloco no Debian 9

O Samba é uma solução de código aberto que permite aos usuários configurar compartilhamentos de arquivos e impressão rápidos e seguros. Neste artigo, abordarei como configurar a sagacidade do Samba

Adicionar intervalo de endereços IP ao seu servidor (CentOS / Ubuntu / Debian)

Adicionar intervalo de endereços IP ao seu servidor (CentOS / Ubuntu / Debian)

Introdução Neste tutorial, abordaremos o processo de adicionar um intervalo / sub-rede IP inteiro a um servidor Linux executando o CentOS, Debian ou Ubuntu. O processo

Instale o Plesk no Debian 8 (Jessie)

Instale o Plesk no Debian 8 (Jessie)

Usando um sistema diferente? O Plesk é um painel de controle proprietário de host da web que permite que os usuários administrem seus sites pessoais e / ou clientes, bancos de dados

Como instalar o Koel no Debian 9

Como instalar o Koel no Debian 9

Usando um sistema diferente? O Koel é um aplicativo simples de transmissão de áudio pessoal baseado na Web, escrito em Vue no lado do cliente e Laravel no lado do servidor. Koe

Como implantar o Ghost v0.11 LTS no Debian 8

Como implantar o Ghost v0.11 LTS no Debian 8

Usando um sistema diferente? O Ghost é uma plataforma de blog de código aberto que vem ganhando popularidade entre desenvolvedores e usuários comuns desde a sua 201

A IA pode lutar contra o aumento do número de ataques de ransomware

A IA pode lutar contra o aumento do número de ataques de ransomware

Os ataques de ransomware estão aumentando, mas a IA pode ajudar a lidar com os vírus de computador mais recentes? AI é a resposta? Leia aqui para saber se é AI boone ou bane

ReactOS: Este é o futuro do Windows?

ReactOS: Este é o futuro do Windows?

ReactOS, um sistema operacional de código aberto e gratuito está aqui com a versão mais recente. Será que ela pode atender às necessidades dos usuários modernos do Windows e derrubar a Microsoft? Vamos descobrir mais sobre esse estilo antigo, mas uma experiência de sistema operacional mais recente.

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

O Whatsapp finalmente lançou o aplicativo Desktop para usuários de Mac e Windows. Agora você pode acessar o Whatsapp do Windows ou Mac facilmente. Disponível para Windows 8+ e Mac OS 10.9+

Como a IA pode levar a automação de processos ao próximo nível?

Como a IA pode levar a automação de processos ao próximo nível?

Leia isto para saber como a Inteligência Artificial está se tornando popular entre as empresas de pequena escala e como está aumentando as probabilidades de fazê-las crescer e dar vantagem a seus concorrentes.

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

Recentemente, a Apple lançou o macOS Catalina 10.15.4, uma atualização suplementar para corrigir problemas, mas parece que a atualização está causando mais problemas, levando ao bloqueio de máquinas mac. Leia este artigo para saber mais

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

O que é um sistema de arquivos de registro no diário e como ele funciona?

O que é um sistema de arquivos de registro no diário e como ele funciona?

Nosso computador armazena todos os dados de uma maneira organizada conhecida como sistema de arquivos Journaling. É um método eficiente que permite ao computador pesquisar e exibir arquivos assim que você clicar em search.https: //wethegeek.com/? P = 94116 & preview = true

Singularidade tecnológica: um futuro distante da civilização humana?

Singularidade tecnológica: um futuro distante da civilização humana?

À medida que a ciência evolui em um ritmo rápido, assumindo muitos de nossos esforços, os riscos de nos sujeitarmos a uma singularidade inexplicável também aumentam. Leia, o que a singularidade pode significar para nós.

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

O impacto da inteligência artificial na saúde 2021

O impacto da inteligência artificial na saúde 2021

A IA na área da saúde deu grandes saltos nas últimas décadas. Portanto, o futuro da IA ​​na área da saúde ainda está crescendo dia a dia.