Instale y compile "Nginx 1.10.0" (versión estable) desde fuentes en RHEL/CentOS 7.0


Nginx es el servidor web de más rápido crecimiento en la actualidad en servidores públicos orientados a Internet debido a su modelo modular de código abierto gratuito, alto rendimiento, estabilidad, archivos de configuración simple, arquitectura asíncrona (impulsada por eventos) y bajos recursos necesarios. correr.

  1. Instalación mínima de RHEL 7.0
  2. Suscripción y repositorios activos de RedHat en RHEL 7.0

  1. Instalación mínima de CentOS 7.0

  1. Establecer una dirección IP estática en RHEL/CentOS 7.0

Este tutorial lo guiará en la instalación de la última versión estable de Nginx 1.10.0 en Red Hat Enterprise o CentOS 7 desde las fuentes, porque los espejos de repositorios oficiales RHEL/CentOS 7 no proporcionan un paquete binario. Si desea evitar la instalación de fuentes, puede agregar el repositorio oficial de Nginx e instalar el paquete binario (las versiones disponibles son 1.9.x ) con la ayuda de Yum Package Manager como se muestra:

Para habilitar el repositorio oficial de nginx yum para RHEL/CentOS 7, cree un archivo /etc/yum.repos.d/nginx.repo con el siguiente contenido:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

Reemplace "centos" con "rhel", dependiendo de la distribución que esté utilizando e instale nginx con el administrador de paquetes yum como se muestra:

# yum install nginx

Importante: tenga en cuenta que, siguiendo los repositorios oficiales de nginx yum anteriores, obtendrá una versión anterior de nginx, si realmente desea crear la versión más reciente de Nginx, le sugiero que siga la instalación de la fuente como se muestra a continuación.

El uso de la compilación e instalación de fuentes tiene algunos beneficios, debido al hecho de que puede instalar la última versión disponible, puede modificar la configuración de Nginx agregando o eliminando módulos, cambiar la ruta del sistema de instalación u otras configuraciones importantes, en otras palabras, tiene una control total sobre el proceso de instalación.

Paso 1: descargue, compile e instale Nginx

1. Antes de iniciar el proceso de compilación e instalación de Nginx, asegúrese de tener compilador C/C ++, PCRE (Expresiones regulares compatibles con Perl), biblioteca de compresión Zlib y OpenSSL (si tiene la intención de ejecutar Nxing con soporte SSL) los paquetes instalados en su máquina emitiendo el siguiente comando.

# yum -y install gcc gcc-c++ make zlib-devel pcre-devel openssl-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.mirror.net.in
 * extras: centos.mirror.net.in
 * updates: centos.mirror.net.in
Package 1:make-3.82-21.el7.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package gcc.x86_64 0:4.8.5-4.el7 will be installed
--> Processing Dependency: libgomp = 4.8.5-4.el7 for package: gcc-4.8.5-4.el7.x86_64
--> Processing Dependency: cpp = 4.8.5-4.el7 for package: gcc-4.8.5-4.el7.x86_64
--> Processing Dependency: libgcc >= 4.8.5-4.el7 for package: gcc-4.8.5-4.el7.x86_64
--> Processing Dependency: glibc-devel >= 2.2.90-12 for package: gcc-4.8.5-4.el7.x86_64
--> Processing Dependency: libmpfr.so.4()(64bit) for package: gcc-4.8.5-4.el7.x86_64
--> Processing Dependency: libmpc.so.3()(64bit) for package: gcc-4.8.5-4.el7.x86_64
---> Package gcc-c++.x86_64 0:4.8.5-4.el7 will be installed
--> Processing Dependency: libstdc++-devel = 4.8.5-4.el7 for package: gcc-c++-4.8.5-4.el7.x86_64
--> Processing Dependency: libstdc++ = 4.8.5-4.el7 for package: gcc-c++-4.8.5-4.el7.x86_64
---> Package openssl-devel.x86_64 1:1.0.1e-51.el7_2.4 will be installed
--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-51.el7_2.4 for package: 1:openssl-devel-1.0.1e-51.el7_2.4.x86_64
--> Processing Dependency: krb5-devel(x86-64) for package: 1:openssl-devel-1.0.1e-51.el7_2.4.x86_64
---> Package pcre-devel.x86_64 0:8.32-15.el7 will be installed
--> Processing Dependency: pcre(x86-64) = 8.32-15.el7 for package: pcre-devel-8.32-15.el7.x86_64
---> Package zlib-devel.x86_64 0:1.2.7-15.el7 will be installed
--> Processing Dependency: zlib = 1.2.7-15.el7 for package: zlib-devel-1.2.7-15.el7.x86_64
...

2. Ahora vaya a la página oficial de Nginx y tome la última versión estable ( nginx 1.10.0 ) disponible usando el comando wget , extraiga el archivo TAR e ingrese el directorio extraído de Nginx, usando la siguiente secuencia de comandos.

# wget http://nginx.org/download/nginx-1.10.0.tar.gz
# tar xfz nginx-1.10.0.tar.gz
# cd nginx-1.10.0/
# ls -all
--2016-03-21 09:30:15--  http://nginx.org/download/nginx-1.10.0.tar.gz
Resolving nginx.org (nginx.org)... 206.251.255.63, 95.211.80.227, 2001:1af8:4060:a004:21::e3
Connecting to nginx.org (nginx.org)|206.251.255.63|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 908954 (888K) [application/octet-stream]
Saving to: ‘nginx-1.10.0.tar.gz’

100%[=====================================================================================================================================================>] 9,08,954    81.0KB/s   in 11s    

2016-03-21 09:30:27 (77.4 KB/s) - ‘nginx-1.10.0.tar.gz’ saved [908954/908954]

3. El siguiente paso es personalizar el proceso de instalación de Nginx. Use el archivo configure para visualizar las opciones de configuración y los módulos necesarios para su proceso de compilación usando el siguiente comando y asegúrese de estar en nginx-1.6.0/path.

# ./configure --help
-help                             print this message

  --prefix=PATH                      set installation prefix
  --sbin-path=PATH                   set nginx binary pathname
  --modules-path=PATH                set modules path
  --conf-path=PATH                   set nginx.conf pathname
  --error-log-path=PATH              set error log pathname
  --pid-path=PATH                    set nginx.pid pathname
  --lock-path=PATH                   set nginx.lock pathname

  --user=USER                        set non-privileged user for
                                     worker processes
  --group=GROUP                      set non-privileged group for
                                     worker processes

  --build=NAME                       set build name
  --builddir=DIR                     set build directory

  --with-select_module               enable select module
  --without-select_module            disable select module
  --with-poll_module                 enable poll module
  --without-poll_module              disable poll module

  --with-threads                     enable thread pool support

  --with-file-aio                    enable file AIO support
  --with-ipv6                        enable IPv6 support

  --with-http_ssl_module             enable ngx_http_ssl_module
  --with-http_v2_module              enable ngx_http_v2_module
...

4. Ahora es el momento de compilar Nginx con sus configuraciones específicas y módulos habilitados o deshabilitados. Para este tutorial, se utilizaron los siguientes módulos y especificaciones, pero puede ajustar la compilación para que se adapte a sus necesidades.

  1. –user u003d nginx –group u003d nginx u003d> usuario del sistema y grupo con el que se ejecutará Nginx.
  2. –prefix u003d/etc/nginx u003d> directorio para los archivos del servidor (archivo nginx.conf y otros archivos de configuración) - el directorio predeterminado es/usr/local/nginx.
  3. –sbin-path u003d/usr/sbin/nginx u003d> Ubicación del archivo ejecutable Nginx.
  4. –conf-path u003d/etc/nginx/nginx.conf u003d> establece el nombre del archivo de configuración nginx.conf; puede cambiarlo.
  5. –error-log-path u003d/var/log/nginx/error.log u003d> establece la ubicación del archivo de registro de errores de Nginx.
  6. –http-log-path u003d/var/log/nginx/access.log u003d> establece la ubicación del archivo de registro de acceso de Nginx.
  7. –pid-path u003d/var/run/nginx.pid u003d> establece el nombre del archivo de ID del proceso principal.
  8. –lock-path u003d/var/run/nginx.lock u003d> establece el nombre del archivo de bloqueo Nginx.
  9. –with-http_ssl_module u003d> habilita la construcción del módulo HTTPS; no está construido de manera predeterminada y requiere la biblioteca OpenSSL.
  10. –with-pcre u003d> establece la ruta a las fuentes de la biblioteca PCRE; no está construida por defecto y requiere la biblioteca PCRE.

Para ver una lista de todos los módulos de Nginx, visite la página web de Nginx Wiki en http://wiki.nginx.org/Modules.

Si no necesita un módulo específico instalado en Nginx, puede deshabilitarlo usando el siguiente comando.

--without-module_name

Ahora comience a compilar Nginx emitiendo el siguiente comando, que usará todas las configuraciones y módulos discutidos anteriormente (asegúrese de que el comando permanezca en una sola línea).

# ./configure --user=nginx --group=nginx --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --with-http_ssl_module --with-pcre
checking for OS
 + Linux 3.10.0-229.el7.x86_64 x86_64
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) 
checking for gcc -pipe switch ... found
checking for -Wl,-E switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
checking for gcc builtin 64 bit byteswap ... found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for sys/mount.h ... found
checking for sys/statvfs.h ... found
checking for crypt.h ... found
checking for Linux specific features
checking for epoll ... found
checking for EPOLLRDHUP ... found
checking for O_PATH ... found
checking for sendfile() ... found
checking for sendfile64() ... found
checking for sys/prctl.h ... found
checking for prctl(PR_SET_DUMPABLE) ... found
checking for sched_setaffinity() ... found
checking for crypt_r() ... found
checking for sys/vfs.h ... found
checking for poll() ... found
checking for /dev/poll ... not found
...

5. Una vez que el proceso de compilación verifica todas las utilidades requeridas por el sistema como el compilador GNU C, las bibliotecas PCRE y OpenSSL, crea el archivo make.conf y genera un resumen de todas las configuraciones.

Configuration summary
  + using system PCRE library
  + using system OpenSSL library
  + md5: using OpenSSL library
  + sha1: using OpenSSL library
  + using system zlib library

  nginx path prefix: "/etc/nginx"
  nginx binary file: "/usr/sbin/nginx"
  nginx modules path: "/etc/nginx/modules"
  nginx configuration prefix: "/etc/nginx"
  nginx configuration file: "/etc/nginx/nginx.conf"
  nginx pid file: "/var/run/nginx.pid"
  nginx error log file: "/var/log/nginx/error.log"
  nginx http access log file: "/var/log/nginx/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

6. El último paso es compilar los binarios usando el comando make , que puede tardar un tiempo en finalizar dependiendo de los recursos de su máquina, e instalar Nginx en su sistema con make install mando.

Tenga cuidado de que make install requiere privilegios de root para realizar la instalación, por lo que si no ha iniciado sesión con una cuenta de root, utilice un usuario con privilegios con sudo .

# make
# make install
make -f objs/Makefile
make[1]: Entering directory `/root/nginx-1.10.0'
make[1]: Warning: File `src/core/nginx.h' has modification time 3110036 s in the future
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/nginx.o \
	src/core/nginx.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_log.o \
	src/core/ngx_log.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_palloc.o \
	src/core/ngx_palloc.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_array.o \
	src/core/ngx_array.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_list.o \
	src/core/ngx_list.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_hash.o \
	src/core/ngx_hash.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_buf.o \
	src/core/ngx_buf.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_queue.o \
...
make -f objs/Makefile install
make[1]: Entering directory `/root/nginx-1.10.0'
make[1]: Warning: File `src/core/nginx.h' has modification time 3109935 s in the future
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/nginx.o \
	src/core/nginx.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_log.o \
	src/core/ngx_log.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_palloc.o \
	src/core/ngx_palloc.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_array.o \
	src/core/ngx_array.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_list.o \
	src/core/ngx_list.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_hash.o \
	src/core/ngx_hash.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_buf.o \
	src/core/ngx_buf.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_queue.o \
...

Paso 2: Modifique Nginx y cree un script INIT

7. Una vez que el proceso de instalación haya terminado con éxito, agregue el usuario del sistema nginx (con /etc/nginx/ como su directorio de inicio y sin un shell válido), el usuario que Nginx se ejecutará emitiendo el siguiente comando.

# useradd -d /etc/nginx/ -s /sbin/nologin nginx

8. Debido a que en el proceso de compilación habíamos especificado que Nginx se ejecutará desde el usuario del sistema nginx , abra el archivo nginx.conf y cambie la declaración del usuario a nginx .

# nano /etc/nginx/nginx.conf

Aquí ubique y cambie el usuario y, también, documente las declaraciones de ubicación raíz, con las siguientes opciones.

user nginx;
location / {
                root /srv/www/html;
                autoindex on;
                index index.html index.htm;

9. Antes de iniciar Nginx, asegúrese de haber creado la ruta raíz del documento web, luego inicie nginx usando el siguiente comando.

# mkdir -p /srv/www/html
# /usr/sbin/nginx

Si desea verificar si Nginx se está ejecutando usando su indicador de shell, ejecute el comando netstat para verificar las conexiones de escucha.

# netstat -tulpn | grep nginx

10. Para verificarlo desde un sistema remoto, agregue una regla de firewall para abrir la conexión al exterior en el puerto 80 , abra un navegador y dirija la URL a la dirección IP de su servidor en http:// server_IP .

# firewall-cmd --add-service=http  ## For on-fly rule
# firewall-cmd --permanent --add-service=http  ## For permanent rule
# systemctl restart firewalld

11. Para administrar el proceso de Nginx, utilice los siguientes comandos.

  1. nginx -V u003d muestra los módulos y configuraciones de Nginx
  2. nginx -h u003d opciones de ayuda
  3. nginx u003d iniciar el proceso de Nginx
  4. nginx -s stop u003d detener el proceso de Nginx
  5. nginx -s reload u003d recargar el proceso de Nginx

# nginx -V
nginx version: nginx/1.10.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --with-http_ssl_module --with-pcre

12. Si necesita administrar el proceso del demonio Nginx a través de un script init RHEL/CentOS, cree el siguiente archivo nginx en la ruta del sistema /etc/init.d/ y, luego, puede usar los comandos service o systemctl para administrar el proceso.

# nano /etc/init.d/nginx

Agregue el siguiente contenido de archivo.

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#

# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# pidfile:     /var/run/nginx.pid
# user:        nginx

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"
lockfile=/var/run/nginx.lock

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
   *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

13. Una vez creado el archivo de inicio de Nginx, agregue los permisos de ejecución y administre el demonio utilizando las siguientes opciones de comando.

# chmod +x /etc/init.d/nginx
# service nginx start|stop|restart|reload|force_reload|configtest|condrestart
# systemctl start|stop|restart nginx

14. Si necesita habilitar Nginx en todo el sistema, use el siguiente comando para iniciar en el momento del arranque.

# chkconfig nginx on

OR

# systemctl enable nginx

¡Eso es todo! Ahora tiene la última versión de Nginx instalada en su sistema RHEL/CentOS 7. En el siguiente tutorial, discutiré cómo instalar y habilitar el administrador de procesos PHP-FPM a través de Nginx FastCGI Gateway.

Lea también: La guía definitiva para proteger, fortalecer y mejorar el rendimiento del servidor web Nginx