Απαιτήσεις για την κατασκευή NGINX από την πηγή
Πριν ξεκινήσεις
Κατασκευάστε το NGINX από την πηγή
συμπέρασμα
Το NGINX μπορεί να χρησιμοποιηθεί ως διακομιστής HTTP/HTTPS, διακομιστής ανάστροφου διακομιστή μεσολάβησης, διακομιστής μεσολάβησης αλληλογραφίας, εξισορρόπησης φορτίου, τερματιστής TLS ή διακομιστής προσωρινής αποθήκευσης. Είναι αρκετά αρθρωτό από τη σχεδίασή του. Διαθέτει εγγενείς λειτουργικές μονάδες και λειτουργικές μονάδες τρίτων που δημιουργήθηκαν από την κοινότητα. Γραπτό στη γλώσσα προγραμματισμού C, είναι ένα πολύ γρήγορο και ελαφρύ λογισμικό.
NOTE: NGINX has two version streams that run in parallel - stable and mainline. Both versions can be used on a production server. It is recommended to use the mainline version in production.
Η εγκατάσταση του NGINX από τον πηγαίο κώδικα είναι σχετικά "εύκολη" - κατεβάστε την πιο πρόσφατη έκδοση του πηγαίου κώδικα NGINX, διαμορφώστε, δημιουργήστε και εγκαταστήστε τον.
Σε αυτό το σεμινάριο θα χρησιμοποιήσω την κύρια έκδοση, η οποία είναι 1.13.1 τη στιγμή που γράφω. Ενημερώστε τους αριθμούς εκδόσεων ανάλογα όταν γίνουν διαθέσιμες νεότερες εκδόσεις.
Απαιτήσεις για την κατασκευή NGINX από την πηγή
Υποχρεωτικές απαιτήσεις:
- Έκδοση βιβλιοθήκης OpenSSL μεταξύ 1.0.2 - 1.1.0
- Έκδοση βιβλιοθήκης Zlib μεταξύ 1.1.3 - 1.2.11
- Έκδοση βιβλιοθήκης PCRE μεταξύ 4.4 - 8.40
- GCC Compiler
Προαιρετικές απαιτήσεις:
Πριν ξεκινήσεις
Δημιουργήστε τακτικό χρήστη με sudoπρόσβαση .
Μετάβαση στον νέο χρήστη:
su - <username>
Σύστημα ενημέρωσης:
sudo apt update && sudo apt upgrade -y
Κατασκευάστε το NGINX από την πηγή
Το NGINX είναι ένα πρόγραμμα γραμμένο σε C, επομένως πρέπει να εγκαταστήσουμε τον μεταγλωττιστή C (GCC).
sudo apt install build-essential -y
Κατεβάστε την πιο πρόσφατη έκδοση του πηγαίου κώδικα NGINX και εξαγάγετε τον:
wget https://nginx.org/download/nginx-1.13.1.tar.gz && tar zxvf nginx-1.13.1.tar.gz
Κατεβάστε τον πηγαίο κώδικα των εξαρτήσεων NGINX και εξαγάγετε τους:
NGINX depends on 3 libraries: PCRE, zlib and OpenSSL:
# PCRE version 4.4 - 8.40
wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz && tar xzvf pcre-8.40.tar.gz
# zlib version 1.1.3 - 1.2.11
wget http://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz
# OpenSSL version 1.0.2 - 1.1.0
wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz && tar xzvf openssl-1.1.0f.tar.gz
Καταργήστε όλα τα .tar.gzαρχεία. Δεν τους χρειαζόμαστε πια:
rm -rf *.tar.gz
Μεταβείτε στον κατάλογο πηγής NGINX:
cd ~/nginx-1.13.1
Για βοήθεια, μπορείτε να παραθέσετε τους διαθέσιμους διακόπτες διαμόρφωσης εκτελώντας:
./configure --help
Διαμόρφωση, μεταγλώττιση και εγκατάσταση του NGINX:
./configure --prefix=/usr/share/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 \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=www-data \
--group=www-data \
--build=Ubuntu \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-scgi-temp-path=/var/lib/nginx/scgi \
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
--with-openssl=../openssl-1.1.0f \
--with-openssl-opt=enable-ec_nistp_64_gcc_128 \
--with-openssl-opt=no-nextprotoneg \
--with-openssl-opt=no-weak-ssl-ciphers \
--with-openssl-opt=no-ssl3 \
--with-pcre=../pcre-8.40 \
--with-pcre-jit \
--with-zlib=../zlib-1.2.11 \
--with-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_sub_module \
--with-http_stub_status_module \
--with-http_v2_module \
--with-http_secure_link_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-debug \
--with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' \
--with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now'
make
sudo make install
Καταργήστε όλα τα ληφθέντα αρχεία από τον αρχικό κατάλογο, σε αυτήν την περίπτωση /home/username:
cd ~
rm -r nginx-1.13.1/ openssl-1.1.0f/ pcre-8.40/ zlib-1.2.11/
Ελέγξτε την έκδοση NGINX και τις επιλογές χρόνου μεταγλώττισης:
sudo nginx -v && sudo nginx -V
# nginx version: nginx/1.13.0 (Ubuntu)
# built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
# built with OpenSSL 1.1.0f 25 May 2017
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx . . .
# . . .
# . . .
Ελέγξτε τη σύνταξη και τα πιθανά σφάλματα:
sudo nginx -t
# Will throw this error nginx: [emerg] mkdir() "/var/lib/nginx/body" failed (2: No such file or directory)
# Just create directory
mkdir -p /var/lib/nginx && sudo nginx -t
Δημιουργία αρχείου μονάδας systemd για NGINX:
sudo vim /etc/systemd/system/nginx.service
Αντιγράψτε/επικολλήστε το ακόλουθο περιεχόμενο:
NOTE: The location of the PID file and the NGINX binary may be different depending on how NGINX was compiled.
[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed
[Install]
WantedBy=multi-user.target
Εκκινήστε και ενεργοποιήστε την υπηρεσία NGINX:
sudo systemctl start nginx.service && sudo systemctl enable nginx.service
Ελέγξτε εάν το NGINX θα ξεκινήσει μετά από επανεκκίνηση:
sudo systemctl is-enabled nginx.service
# enabled
Ελέγξτε εάν το NGINX εκτελείται:
sudo systemctl status nginx.service
ps aux | grep nginx
curl -I 127.0.0.1
Επανεκκινήστε το Ubuntu VPS για να επαληθεύσετε ότι το NGINX ξεκινά αυτόματα:
sudo shutdown -r now
Δημιουργία προφίλ εφαρμογής UFW NGINX:
sudo vim /etc/ufw/applications.d/nginx
Αντιγράψτε/επικολλήστε το ακόλουθο περιεχόμενο:
[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
Τώρα, βεβαιωθεί��ε ότι τα προφίλ εφαρμογών UFW δημιουργούνται και αναγνωρίζονται:
sudo ufw app list
# Available applications:
# Nginx Full
# Nginx HTTP
# Nginx HTTPS
# OpenSSH
συμπέρασμα
Αυτό είναι. Έχετε πλέον εγκατεστημένη την πιο πρόσφατη έκδοση του NGINX. Μεταγλωττίζεται στατικά έναντι ορισμένων σημαντικών βιβλιοθηκών όπως το OpenSSL. Συχνά, η έκδοση OpenSSL του συστήματος είναι ξεπερασμένη. Χρησιμοποιώντας αυτήν τη μέθοδο εγκατάστασης με μια νεότερη έκδοση του OpenSSL, μπορείτε να επωφεληθείτε από νέους τύπους κρυπτογράφησης CHACHA20_POLY1305και πρωτόκολλα όπως το TLS 1.3 που θα είναι διαθέσιμα στο OpenSSL 1.1.1(το οποίο δεν έχει κυκλοφορήσει).