GNU/Linux >> Tutoriales Linux >  >> Fedora

Cómo compilar Nginx desde la fuente en Fedora 29

Nginx (pronunciado "motor x" ) es un software de servidor web de código abierto diseñado con alta concurrencia en mente, que se puede usar como servidor HTTP/HTTPSservidor proxy inversoservidor proxy de correoequilibrador de carga de softwareTerminación TLSservidor de almacenamiento en caché ...

Es una pieza de software extremadamente modular. Incluso algunas de las piezas del software aparentemente "incorporadas", como GZIP o SSL, en realidad están construidas como módulos que se pueden habilitar y deshabilitar durante el tiempo de compilación.

Tiene núcleo (nativomódulosmódulos de terceros (externos) creado por la comunidad. En este momento, hay más de cien módulos de terceros que podemos utilizar.

Escrito en C es un software muy rápido y ligero.

Instalar Nginx desde el código fuente es relativamente "fácil":descargue la última versión del código fuente de Nginx, configúrelo, compílelo e instálelo.

Deberá elegir si desea descargar la línea principalestable versión, pero construirlos es exactamente lo mismo.

En este tutorial, construiremos Nginx con todos los módulos disponibles en la versión de código abierto de Nginx y usaremos mainline  versión que está en 1.15.8 en el momento de escribir este artículo. Actualice los números de versión cuando haya versiones más nuevas disponibles.

Estable vs. versión principal

Nginx Open Source está disponible en dos versiones:

  • Línea principal – Incluye las últimas funciones y correcciones de errores y siempre está actualizado. Es confiable, pero puede incluir algunos módulos experimentales y también puede tener algunos errores nuevos.
  • Estable – No incluye todas las funciones más recientes, pero tiene correcciones de errores críticos que siempre se actualizan a la versión principal.

Módulos principales frente a módulos de terceros

Nginx tiene dos tipos de módulos que puede utilizar: módulos principalesmódulos de terceros .

Los módulos principales están creados por los desarrolladores principales de Nginx y son parte del software en sí.

Los módulos de terceros son creados por la comunidad y puede usarlos para ampliar la funcionalidad de Nginx. Hay muchos módulos útiles de terceros, los más famosos son:PageSpeed, ModSecurity, RTMP, Lua, etc...

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

Los módulos estáticos existen en Nginx desde la primera versión. Los módulos dinámicos se introdujeron con Nginx 1.9.11+ en febrero de 2016.

Con los módulos estáticos, el conjunto de módulos que constituyen un binario de Nginx se corrige en el momento de la compilación mediante ./configure texto. Los módulos estáticos usan --with-foo_bar_module--add-module=PATH sintaxis.

Para compilar el módulo central (estándar) como dinámico, agregamos =dynamic , por ejemplo --with-http_image_filter_module=dynamic .

Para compilar un módulo de terceros como dinámico, usamos --add-dynamic-module=/path/to/module sintaxis y luego los cargamos usando load_module directiva en el contexto global de nginx.conf archivo.

Requisitos para compilar Nginx desde el origen

En comparación con otro software de UNIX/Linux, Nginx es bastante liviano y no tiene muchas dependencias de biblioteca. La configuración de compilación predeterminada depende de que solo se instalen 3 bibliotecas: OpenSSL /LibreSSL /SSL aburridoZlibPCRE .

  • Requisitos obligatorios:
    • Colección de compiladores GNU (GCC )
    • Versión de la biblioteca OpenSSL entre 1.0.21.1.1 o biblioteca LibreSSL o biblioteca BoringSSL
    • Versión de la biblioteca Zlib entre 1.1.31.2.11
    • Versión de la biblioteca PCRE entre 4.48,42
  • Requisitos opcionales:
    • Perl
    • LibGD
    • Biblioteca C heredada MaxMind GeoIP
    • libxml2
    • libxslt

Requisitos

  • Un servidor que ejecuta el sistema Fedora 29.
  • Un usuario no root con privilegios sudo.

Pasos iniciales

Comprueba tu versión de Fedora:

cat /etc/fedora-release
# Fedora release 29 (Twenty Nine)

Configurar la zona horaria:

timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'

Actualice los paquetes de su sistema operativo Fedora:

sudo dnf upgrade -y

Instale los paquetes vim, curl, wget y tree:

sudo dnf install -y vim curl wget tree

Compila Nginx desde la fuente

Nginx es un programa escrito en C , por lo que primero deberá instalar una herramienta de compilación:

sudo dnf groupinstall -y 'Development Tools'

Descargue la última versión principal del código fuente de Nginx y extráigalo. El código fuente de Nginx se distribuye como archivo comprimido (gzip tarball), como la mayoría del software de Unix y Linux:

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

Descarga el código fuente de las dependencias obligatorias de Nginx y extráelo:

# PCRE version 8.42
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz && tar xzvf pcre-8.42.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.1a
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz && tar xzvf openssl-1.1.1a.tar.gz

Instalar dependencias Nginx opcionales:

sudo dnf install -y perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel

Limpia todo .tar.gz archivos, ya que ya no son necesarios:

rm -rf *.tar.gz

Ingrese al directorio fuente de Nginx:

cd ~/nginx-1.15.8

Para una buena lista de directorios y archivos de medida que componen el código fuente de Nginx con tree utilidad:

tree -L 2 .

Copie la página del manual de Nginx en /usr/share/man/man8/ directorio:

sudo cp ~/nginx-1.15.8/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 obtener ayuda, puede ver la lista completa de opciones actualizadas de tiempo de compilación de Nginx ejecutando:

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

Configurar, compilar e instalar NGINX:

./configure --prefix=/etc/nginx \
            --sbin-path=/usr/sbin/nginx \
            --modules-path=/usr/lib64/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=Fedora \
            --builddir=nginx-1.15.8 \
            --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/lib64/perl5 \
            --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.42 \
            --with-pcre-jit \
            --with-zlib=../zlib-1.2.11 \
            --with-openssl=../openssl-1.1.1a \
            --with-openssl-opt=no-nextprotoneg \
            --with-debug


make
sudo make install

Después de compilar Nginx, vaya a casa (~ ) directorio:

cd ~

Enlace simbólico /usr/lib64/nginx/modules/etc/nginx/modules directorio. etc/nginx/modules es un lugar estándar para los módulos Nginx:

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

Imprima la versión de Nginx, la versión del compilador y configure los parámetros del script:

sudo nginx -V
# nginx version: nginx/1.15.8 (Fedora)
# built by gcc 8.2.1 20150623 (Red Hat 8.2.1-6) (GCC)
# built with OpenSSL 1.1.1a  20 Nov 2018
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules
# . . .
# . . .

Crear grupo y usuario del sistema Nginx:

sudo useradd --system --home /var/cache/nginx --shell /sbin/nologin --comment "nginx user" --user-group nginx

Verifique la sintaxis de Nginx y los posibles errores:

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

Crear archivo de unidad systemd de Nginx:

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

Copie y pegue el siguiente contenido en /etc/systemd/system/nginx.service archivo:

NOTA : La ubicación del PID El archivo y el binario de Nginx pueden ser diferentes según cómo se compiló Nginx.

[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 Nginx para que se inicie en el arranque e inicie Nginx inmediatamente:

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

Compruebe si Nginx se iniciará automáticamente después de reiniciar:

sudo systemctl is-enabled nginx.service
# enabled

Compruebe si Nginx se está ejecutando ejecutando uno de los siguientes comandos:

sudo systemctl status nginx.service
# or
ps aux | grep nginx
# or
curl -I 127.0.0.1

También puede abrir su navegador y navegar a su dominio/dirección IP para ver la página predeterminada de Nginx. Ese es un indicador de que Nginx está funcionando.

Nginx de forma predeterminada genera una copia de seguridad .default archivos en /etc/nginx . Quitar .default archivos de /etc/nginx  directorio:

sudo rm /etc/nginx/*.default

Coloque el resaltado de sintaxis de la configuración de Nginx para el editor de Vim en ~/.vim :

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

NOTA :Al realizar el paso anterior, obtendrá un buen resaltado de sintaxis al editar los archivos de configuración de Nginx en el editor de Vim.

Crear conf.dsnippetssites-availablesites-enabled directorios en /etc/nginx directorio:

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

Cambie los permisos y la propiedad del grupo de los archivos de registro de Nginx:

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

Crear configuración de rotación de registros para Nginx.

sudo vim /etc/logrotate.d/nginx

Complete el archivo con el siguiente texto, luego guarde y salga:

/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
}

Eliminar todos los archivos descargados del directorio de inicio:

cd ~
rm -rf nginx-1.15.8/ openssl-1.1.1a/ pcre-8.42/ zlib-1.2.11/

Eso es todo. Ahora, tiene instalada la última versión de Nginx al compilarla a partir del código fuente. Se compila estáticamente contra algunas bibliotecas importantes como OpenSSL. A menudo, la versión de OpenSSL proporcionada por el sistema está desactualizada. Al usar este método de instalación con una versión más nueva de OpenSSL, puede aprovechar los nuevos cifrados como CHACHA20_POLY1305 y protocolos como TLS 1.3 que es compatible con OpenSSL 1.1.1. Además, al compilar su propio binario, puede personalizar la funcionalidad que proporcionará su Nginx, que es mucho más flexible que instalar un binario prediseñado.


Fedora
  1. Cómo compilar la herramienta de compresión Brotli desde el origen en Fedora 29

  2. Cómo actualizar Fedora Linux a la última versión

  3. Cómo crear paquetes desde el origen mediante CheckInstall

  4. Cómo actualizar Fedora 34 desde Fedora 33 usando DNF

  5. Cómo actualizar de Fedora 32 a Fedora 33

Cómo actualizar a Fedora 26 desde Fedora 25

Cómo compilar paquetes Debian desde el código fuente

Cómo actualizar de Fedora 32 a Fedora 33

Cómo actualizar a Fedora 35 desde Fedora 34

Cómo instalar Nginx en Fedora 35

Cómo compilar el kernel de Linux desde el origen para crear un kernel personalizado