Installéiert a kompiléiert Nginx 1.10.0 (Stable Release) vu Quellen an RHEL/CentOS 7.0


Nginx ass dee séierst wuessende Webserver haut um ëffentlechen Internet vis-à-vis Serveren wéinst sengem gratis Open Source modulare Modell, High-Performance, Stabilitéit, einfache Konfiguratiounsdateien, asynchroner Architektur (Event-Undriff) a wéineg néideg Ressourcen lafen.

  1. Minimal Installatioun vu RHEL 7.0
  2. Aktiv RedHat Abonnement a Repositories op RHEL 7.0

  1. Minimal Installatioun vu CentOS 7.0

  1. Statesch IP Adress op RHEL/CentOS 7.0 setzen

Dësen Tutorial wäert Iech guidéieren iwwer d'Installatioun vun der leschter stabiler Versioun vun Nginx 1.10.0 op Red Hat Enterprise oder CentOS 7 vu Quellen, well offiziell RHEL/CentOS 7 Repositories Spigelen kee binäre Package ubidden. Wann Dir Quellinstallatioun vermeiden wëllt, kënnt Dir den offiziellen Nginx Repository addéieren an de binäre Package installéieren (verfügbar Versiounen ass 1.9.x) mat der Hëllef vum Yum Package Manager wéi gewisen:

Fir den offiziellen nginx Yum Repository fir RHEL/CentOS 7 z'aktivéieren, erstellt eng Datei /etc/yum.repos.d/nginx.repo mat den folgenden Inhalter:

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

Ersetzen\centos mat rhel, jee no der Verdeelung déi Dir benotzt an installéiert nginx mam yum Package Manager wéi gewisen:

# yum install nginx

Wichteg: Notéiert w.e.g., folgend offiziell nginx yum Repositories ginn Iech méi al Versioun vun nginx, wann Dir wierklech déi lescht Versioun vun Nginx wëllt bauen, da proposéieren ech Iech d'Quellinstallatioun ze verfollegen wéi hei ënnendrënner.

D'Benotzung vu Quellen Zesummesetzung an Installatioun huet e puer Virdeeler, wéinst der Tatsaach datt Dir déi lescht verfügbar Versioun installéiere kënnt, kënnt Dir d'Nginx Konfiguratioun upassen andeems Dir Moduler derbäigesat oder ewechhuelt, d'Installatiounssystemwee änneren oder aner wichteg Astellungen, an anere Wierder, Dir hutt e komplett Kontroll iwwer Installatioun Prozess.

Schrëtt 1: Eroflueden, kompiléieren an installéieren Nginx

1. Ier Dir d'Nginx-Kompilatioun an d'Installatiounsprozess starten, gitt sécher datt Dir C/C++ Compiler, PCRE (Perl Compatible Regular Expressions), Zlib Compression Library an OpenSSL< hutt (wann Dir wëlles Nxing mat SSL Ënnerstëtzung ze lafen) Packagen op Ärer Maschinn installéiert andeems Dir de folgende Kommando ausginn.

# 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. Gitt elo op Nginx offiziell Säit a gräift déi lescht Stable Versioun (nginx 1.10.0) verfügbar mat wget Kommando, extrahéiert den TAR Archiv a gitt den Nginx extrahéierten Verzeichnis, benotzt déi folgend Kommandoen Sequenz.

# 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. Den nächste Schrëtt ass den Nginx Installatiounsprozess personaliséieren. Benotzt d'configuréieren Datei fir d'Konfiguratiounsoptiounen a Moduler ze visualiséieren déi fir Äre Kompiléierungsprozess néideg sinn mat dem folgenden Kommando a gitt sécher datt Dir am nginx-1.6.0/ Wee sidd.

# ./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. Elo ass et Zäit fir Nginx mat Äre spezifesche Konfiguratiounen an aktivéierten oder behënnerte Moduler ze kompiléieren. Fir dësen Tutorial goufen déi folgend Moduler a Spezifikatioune benotzt, awer Dir kënnt d'Kompilatioun upassen op wat och ëmmer Äre Besoinen passt.

  1. –user=nginx –group=nginx => System Benotzer a Grupp als Nginx wäert lafen.
  2. –Prefix=/etc/nginx => Verzeechnes fir Serverdateien (nginx.conf Datei an aner Konfiguratiounsdateien) – Standard ass /usr/local/nginx Verzeichnis.
  3. –sbin-path=/usr/sbin/nginx => Nginx ausführbar Dateiplaz.
  4. –conf-path=/etc/nginx/nginx.conf => setzt den Numm fir d'nginx.conf Konfiguratiounsdatei fest – Dir kënnt se änneren.
  5. –error-log-path=/var/log/nginx/error.log => setzt den Nginx Feeler Log Datei Location.
  6. –http-log-path=/var/log/nginx/access.log => setzt d'Nginx Zougangsprotokolldatei Plaz.
  7. –pid-path=/var/run/nginx.pid => setzt den Numm fir den Haaptprozess ID Datei.
  8. –lock-path=/var/run/nginx.lock => setzt den Numm fir d'Nginx Sperrdatei fest.
  9. –with-http_ssl_module => erlaabt den HTTPS Modul ze bauen - net als Standard gebaut a erfuerdert OpenSSL Bibliothéik.
  10. –with-pcre => setzt de Wee op d'Quellen vun der PCRE-Bibliothéik - net als Standard gebaut a erfuerdert PCRE-Bibliothéik.

Fir eng Lëscht vun all Nginx Moduler ze gesinn, besicht d'Nginx Wiki Websäit op http://wiki.nginx.org/Modules.

Wann Dir kee spezifesche Modul brauch deen op Nginx installéiert ass, kënnt Dir et auszeschalten mat dem folgenden Kommando.

--without-module_name

Fänkt elo un Nginx ze kompiléieren andeems Dir de folgende Kommando ausstellt, deen all d'Konfiguratiounen a Moduler benotzt, déi hei uewe diskutéiert ginn (vergewëssert Iech datt de Kommando op enger eenzeger Linn bleift).

# ./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. Nodeems de Compilatiounsprozess all System erfuerderlech Utilitys wéi GNU C Compiler, PCRE an OpenSSL Bibliothéiken verifizéiert, erstellt d'make.conf Datei an e Resumé vun all Konfiguratiounen.

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. De leschte Schrëtt ass fir d'Binären ze bauen mat dem make Kommando, wat e bëssen Zäit daueren kann fir ofhängeg vun Ärem Maschinnressourcen ofzeschléissen, an Nginx op Ärem System installéieren mat make install Kommando.

Sidd virsiichteg datt Installatioun erfuerdert Root Privilegien fir d'Installatioun auszeféieren, also wann Dir net mam root Kont ageloggt sidd, benotzt e Privileg Benotzer mat 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 \
...

Schrëtt 2: Tweak Nginx an Erstellt INIT Skript

7. Nodeems den Installatiounsprozess mat Erfolleg fäerdeg ass, add nginx System Benotzer (mat /etc/nginx/ als säin Heemverzeechnes a ouni valabel Shell), de Benotzer deen Nginx wäert lafen wéi andeems Dir de folgende Kommando ausginn.

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

8. Well um Kompiléierungsprozess hu mir spezifizéiert datt Nginx vum nginx System Benotzer leeft, öffnet nginx.conf Datei an ännert d'Benotzererklärung op nginx.

# nano /etc/nginx/nginx.conf

Hei lokaliséieren an änneren Benotzer an, och, Dokument root Standuert Aussoen, mat de folgenden Optiounen.

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

9. Ier Dir Nginx starten, vergewëssert Iech datt Dir de Webdokument Root Wee erstallt hutt, da fänkt nginx mat dem folgenden Kommando un.

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

Wann Dir wëllt iwwerpréiwen ob Nginx mat Ärem Shell-Prompt leeft, fuert netstat Kommando fir d'Nolauschterverbindungen z'iwwerpréiwen.

# netstat -tulpn | grep nginx

10. Fir et vun engem Remote System z'iwwerpréiwen, füügt eng Firewall-Regel un fir d'Verbindung no baussen um Port 80 opzemaachen, e Browser opmaachen an direkt URL op Är Server IP Adress op 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. Fir den Nginx Prozess ze verwalten benotzt déi folgend Kommandoen.

  1. nginx -V = weist Nginx Moduler a Konfiguratiounen un
  2. nginx -h = Hëllef Optiounen
  3. nginx = Start Nginx Prozess
  4. nginx -s stop = den Nginx Prozess stoppen
  5. nginx -s reload = Nginx Prozess nei lueden

# 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. Wann Dir den Nginx Daemon Prozess duerch e init RHEL/CentOS Skript verwalten musst, erstellt déi folgend nginx Datei op /etc/init.d/ Systemwee, an, da kënnt Dir Service oder systemctl Kommandoe benotzen fir de Prozess ze managen.

# nano /etc/init.d/nginx

Füügt de folgenden Dateiinhalt.

#!/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. Nodeems d'Nginx init-Datei erstallt ass, addéieren d'Ausféierungsrechter a verwalten den Daemon mat de Kommandooptiounen hei ënnen.

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

14. Wann Dir Nginx Systemwäit aktivéiere musst, benotzt de folgende Kommando fir bei der Bootzäit unzefänken.

# chkconfig nginx on

OR

# systemctl enable nginx

Dat ass alles! Elo hutt Dir déi lescht Versioun vun Nginx op Ärem RHEL/CentOS 7 System installéiert. Am nächsten Tutorial wäert ech diskutéieren wéi Dir PHP-FPM Prozessmanager installéiere an aktivéiert obwuel Nginx FastCGI Gateway.

Liest och: Den Ultimate Guide fir ze sécheren, härden a verbesseren d'Performance vum Nginx Web Server