Εισαγωγή
Το Nginx είναι ένα λογισμικό διακομιστή ιστού ανοιχτού κώδικα που έχει σχεδιαστεί με γνώμονα την υψηλή ταυτόχρονη χρήση, που μπορεί να χρησιμοποιηθεί ως διακομιστής HTTP/HTTPS, διακομιστής ανάστροφου διακομιστή μεσολάβησης, διακομιστής μεσολάβησης αλληλογραφίας, εξισορρόπησης φόρτου λογισμικού, τερματιστής TLS, διακομιστής προσωρινής αποθήκευσης και πολλά άλλα!
Είναι ένα πολύ αρθρωτό κομμάτι λογισμικού. Ακόμη και μερικά από τα φαινομενικά "ενσωματωμένα" μέρη του λογισμικού, όπως το GZIP ή το SSL, δημιουργούνται στην πραγματικότητα ως λειτουργικές μονάδες που μπορούν να ενεργοποιηθούν και να απενεργοποιηθούν κατά τη διάρκεια του χρόνου κατασκευής.
Διαθέτει βασικές (εγγενείς) λειτουργικές μονάδες και λειτουργικές μονάδες τρίτων (εξωτερικές) που δημιουργήθηκαν από την κοινότητα. Αυτήν τη στιγμή, υπάρχουν πάνω από εκατό λειτουργικές μονάδες τρίτων που μπορούμε να χρησιμοποιήσουμε.
Γραπτό σε C, είναι ένα γρήγορο και ελαφρύ λογισμικό.
Η εγκατάσταση του Nginx από τον πηγαίο κώδικα είναι σχετικά εύκολη - κατεβάστε την πιο πρόσφατη έκδοση του πηγαίου κώδικα Nginx, διαμορφώστε, δημιουργήστε και εγκαταστήστε την.
Θα χρειαστεί να επιλέξετε εάν θα κάνετε λήψη της κύριας ή μιας σταθερής έκδοσης, αλλά η κατασκευή τους είναι η ίδια.
Σε αυτόν τον οδηγό, θα συντάξουμε μια κύρια έκδοση του Nginx στο Debian 10 (buster). Θα χρησιμοποιήσουμε όλες τις διαθέσιμες μονάδες στην έκδοση ανοιχτού κώδικα του Nginx.
Γιατί να μεταγλωττίσετε και να εγκαταστήσετε το Nginx από την πηγή
Πιθανότατα ρωτάτε γιατί να μεταγλωττίσει κάποιος το Nginx από μια πηγή όταν μπορείτε να χρησιμοποιήσετε έτοιμα πακέτα. Ακολουθούν ορισμένοι λόγοι για τους οποίους μπορεί να θέλετε να μεταγλωττίσετε μόνοι σας συγκεκριμένο λογισμικό:
- Για να ελέγξετε τις επιλογές διαμόρφωσης.
- Για να εγκαταστήσετε το λογισμικό όπου θέλετε. Μπορείτε ακόμη να εγκαταστήσετε πολλές διαφορετικές εκδόσεις του ίδιου λογισμικού.
- Για να ελέγξετε την έκδοση που εγκαθιστάτε. Οι διανομές δεν παραμένουν πάντα ενημερωμένες με τις πιο πρόσφατες εκδόσεις όλων των πακέτων, ιδιαίτερα με τα πρόσθετα σε πακέτα λογισμικού.
- Για να κατανοήσετε καλύτερα πώς λειτουργεί το λογισμικό.
Σταθερή έναντι κύριας έκδοσης
Το Nginx Open Source είναι διαθέσιμο σε δύο εκδόσεις:
- Mainline – Περιλαμβάνει τις πιο πρόσφατες δυνατότητες και διορθώσεις σφαλμάτων και είναι πάντα ενημερωμένο. Είναι αξιόπιστο, αλλά μπορεί να περιλαμβάνει κάποιες πειραματικές ενότητες και μπορεί επίσης να έχει κάποιο αριθμό νέων σφαλμάτων.
- Σταθερό – Δεν περιλαμβάνει όλες τις πιο πρόσφατες δυνατότητες, αλλά έχει κρίσιμες διορθώσεις σφαλμάτων που πάντα αναφέρονται στην κύρια έκδοση.
Βασικές μονάδες έναντι λειτουργικών μονάδων τρίτων
Το Nginx έχει δύο τύπους λειτουργικών μονάδων που μπορείτε να χρησιμοποιήσετε: βασικές μονάδες και λειτουργικές μονάδες τρίτων.
Οι προγραμματιστές του πυρήνα Nginx δημιουργούν βασικές μονάδες και αποτελούν μέρος του ίδιου του λογισμικού.
Η κοινότητα δημιουργεί λειτουργικές μονάδες τρίτων και μπορείτε να τις χρησιμοποιήσετε για να επεκτείνετε τη λειτουργικότητα. Υπάρχουν πολλές χρήσιμες ενότητες τρίτων κατασκευαστών.
Στατικές μονάδες έναντι δυναμικών μονάδων
Στατικές μονάδες υπάρχουν στο Nginx από την πρώτη κιόλας έκδοση. Οι δυναμικές μονάδες παρουσιάστηκαν με το Nginx 1.9.11+ τον Φεβρουάριο του 2016.
Με τις στατικές ενότητες, ένα σύνολο μονάδων που αποτελούν ένα δυαδικό Nginx καθορίζεται κατά το χρόνο μεταγλώττισης από το ./configure
σενάριο. Χρήση --with-foo_bar_module
ή --add-module=PATH
σύνταξη στατικών μονάδων .
Για να μεταγλωττίσουμε μια βασική (τυπική) ενότητα ως δυναμική, προσθέτουμε =dynamic
, για παράδειγμα --with-http_image_filter_module=dynamic
.
Για να μεταγλωττίσουμε μια λειτουργική μονάδα τρίτου κατασκευαστή ως δυναμική, χρησιμοποιούμε --add-dynamic-module=/path/to/module
σύνταξη και στη συνέχεια τη φορτώνουμε χρησιμοποιώντας την load_module
οδηγία στο καθολικό πλαίσιο του nginx.conf
αρχείου.
Απαιτήσεις για την κατασκευή Nginx από την πηγή
Σε σύγκριση με κάποιο άλλο λογισμικό UNIX/Linux, το Nginx είναι αρκετά ελαφρύ και δεν έχει πολλές εξαρτήσεις βιβλιοθήκης. Η προεπιλεγμένη διαμόρφωση του build εξαρτάται από μόνο 3 βιβλιοθήκες που θα εγκατασταθούν: OpenSSL/LibreSSL/BoringSSL, Zlib και PCRE.
- Υποχρεωτικές απαιτήσεις:
- Προαιρετικές απαιτήσεις:
ΣΗΜΕΙΩΣΗ : Το Nginx μπορεί επίσης να μεταγλωττιστεί σε βιβλιοθήκες κρυπτογράφησης LibreSSL και BoringSSL αντί για OpenSSL.
Πριν ξεκινήσεις
Ελέγξτε την έκδοση του Debian.
lsb_release -ds # Debian GNU/Linux 10 (buster)
Δημιουργήστε έναν κανονικό χρήστη με sudo
πρόσβαση.
adduser johndoe --gecos "John Doe" usermod -aG sudo johndoe
ΣΗΜΕΙΩΣΗ : Αντικαταστήστε το johndoe
με το όνομα χρήστη σας .
Μετάβαση σε νέο χρήστη.
su - johndoe
Ρυθμίστε τη ζώνη ώρας.
sudo dpkg-reconfigure tzdata
Ενημερώστε το λογισμικό του λειτουργικού σας συστήματος.
sudo apt update && sudo apt upgrade -y
Εγκαταστήστε τα απαραίτητα πακέτα.
sudo apt install -y software-properties-common ufw
Δημιουργήστε το Nginx από την πηγή
Το Nginx είναι ένα πρόγραμμα γραμμένο σε C, επομένως θα χρειαστεί πρώτα να εγκαταστήσετε ένα εργαλείο μεταγλώττισης. Εγκατάσταση build-essential
, git
και tree
.
sudo apt install -y build-essential git tree
Κατεβάστε την πιο πρόσφατη κύρια έκδοση του πηγαίου κώδικα Nginx και αποσυσκευάστε το αρχείο πηγαίου κώδικα. Ο πηγαίος κώδικας Nginx διανέμεται ως συμπιεσμένο αρχείο, όπως τα περισσότερα λογισμικά Unix και Linux.
wget https://nginx.org/download/nginx-1.17.2.tar.gz && tar zxvf nginx-1.17.2.tar.gz
Κατεβάστε τον υποχρεωτικό πηγαίο κώδικα των εξαρτήσεων Nginx και εξαγάγετε τον.
# 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
Εγκαταστήστε προαιρετικές εξαρτήσεις Nginx.
sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev
Εκκαθάριση όλων των .tar.gz
αρχείων. Δεν τους χρειαζόμαστε πια.
rm -rf *.tar.gz
Εισαγάγετε τον κατάλογο πηγής Nginx.
cd ~/nginx-1.17.2
Για καλή μέτρηση, παραθέστε καταλόγους και αρχεία που συνθέτουν τον πηγαίο κώδικα Nginx με tree
.
tree -L 2 .
Αντιγράψτε τη σελίδα του εγχειριδίου στο /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
Για βοήθεια, μπορείτε να δείτε μια πλήρη λίστα με ενημερωμένες επιλογές χρόνου μεταγλώττισης Nginx εκτελώντας τα παρακάτω.
./configure --help # To see want core modules can be built as dynamic run: ./configure --help | grep -F =dynamic
Διαμόρφωση, μεταγλώττιση και εγκατάσταση του 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
Μετά τη συλλογή, μεταβείτε στον ~
κατάλογο του σπιτιού σας ( ).
cd ~
Συμβολικός σύνδεσμος /usr/lib/nginx/modules
προς /etc/nginx/modules
. Αυτό είναι ένα τυπικό μέρος για μονάδες Nginx.
sudo ln -s /usr/lib/nginx/modules /etc/nginx/modules
Εκτυπώστε την έκδοση Nginx, την έκδοση μεταγλωττιστή και διαμορφώστε τις παραμέτρους του σεναρίου.
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 . . . # . . . # . . .
Δημιουργήστε μια ομάδα συστήματος 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
Ελέγξτε τη σύνταξη του Nginx και τα πιθανά σφάλματα.
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
Δημιουργήστε ένα αρχείο μονάδας συστήματος Nginx.
sudo vim /etc/systemd/system/nginx.service
Συμπληρώστε το /etc/systemd/system/nginx.service
αρχείο με το ακόλουθο περιεχόμενο.
[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
Ενεργοποιήστε το Nginx για να ξεκινήσει κατά την εκκίνηση και εκκινήστε το Nginx αμέσως.
sudo systemctl enable nginx.service sudo systemctl start nginx.service
Ελέγξτε εάν το Nginx θα ξεκινήσει αυτόματα μετά από μια επανεκκίνηση.
sudo systemctl is-enabled nginx.service # enabled
Ελέγξτε την κατάσταση.
sudo systemctl status nginx.service
ΣΗΜΕΙΩΣΗ : Μπορείτε να επαληθεύσετε ότι το Nginx εκτελείται μεταβαίνοντας στον τομέα ή τη διεύθυνση IP του ιστότοπού σας σε ένα πρόγραμμα περιήγησης ιστού. Θα δείτε τη σελίδα καλωσορίσματος Nginx. Αυτός είναι ένας δείκτης ότι το Nginx είναι σε λειτουργία και λειτουργεί στο VPS σας.
Δημιουργήστε ένα προφίλ εφαρμογής UFW Nginx.
sudo vim /etc/ufw/applications.d/nginx
Αντιγράψτε/επικολλήστε το παρακάτω περιεχόμενο στο /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, από προεπιλογή, δημιουργεί αντίγραφα ασφαλείας σε .default
αρχεία /etc/nginx
. Αφαιρέστε .default
αρχεία από τον /etc/nginx
κατάλογο.
sudo rm /etc/nginx/*.default
Τοποθετήστε την επισήμανση σύνταξης της διαμόρφωσης Nginx για τον επεξεργαστή 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/
ΣΗΜΕΙΩΣΗ : Κάνοντας το παραπάνω βήμα, θα έχετε μια ωραία επισήμανση σύνταξης κατά την επεξεργασία των αρχείων διαμόρφωσης Nginx στο πρόγραμμα επεξεργασίας Vim.
Δημιουργήστε conf.d
, snippets
, sites-available
και sites-enabled
καταλόγους /etc/nginx
.
sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}
Αλλαγή δικαιωμάτων και ομαδικής ιδιοκτησίας αρχείων καταγραφής Nginx.
sudo chmod 640 /var/log/nginx/* sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log
Δημιουργήστε μια διαμόρφωση περιστροφής καταγραφής για το Nginx.
sudo vim /etc/logrotate.d/nginx
Συμπληρώστε το αρχείο με το ακόλουθο κείμενο, στη συνέχεια αποθηκεύστε και βγείτε.
/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 }
Αφαιρέστε όλα τα ληφθέντα αρχεία από τον αρχικό κατάλογο.
cd ~ rm -rf nginx-1.17.2/ openssl-1.1.1c/ pcre-8.43/ zlib-1.2.11/
Περίληψη
Αυτό είναι. Τώρα, έχετε εγκαταστήσει την πιο πρόσφατη έκδοση του Nginx. Μεταγλωττίζεται στατικά έναντι ορισμένων σημαντικών βιβλιοθηκών όπως το OpenSSL. Συχνά, η έκδοση του OpenSSL που παρέχεται από το σύστημα είναι ξεπερασμένη. Χρησιμοποιώντας αυτήν τη μέθοδο εγκατάστασης με μια νεότερη έκδοση του OpenSSL, μπορείτε να επωφεληθείτε από τους σύγχρονους κρυπτογράφους όπως CHACHA20_POLY1305
και τα πρωτόκολλα όπως το TLS 1.3 που είναι διαθέσιμα στο OpenSSL 1.1.1
. Επιπλέον, με τη σύνταξη του δικού σας δυαδικού αρχείου, μπορείτε να προσαρμόσετε τη λειτουργικότητα που θα παρέχει το Nginx σας, κάτι που είναι πολύ πιο ευέλικτο από την εγκατάσταση ενός προκατασκευασμένου δυαδικού αρχείου.