Πώς να εγκαταστήσετε το Nginx με εικονικούς κεντρικούς υπολογιστές και πιστοποιητικό SSL


Το Nginx (συντομογραφία για το Engine-x) είναι ένας δωρεάν, ανοιχτού κώδικα, ισχυρός, υψηλής απόδοσης και κλιμακωτός διακομιστής μεσολάβησης HTTP και αντίστροφης μεσολάβησης, αλληλογραφίας και τυπικού διακομιστή μεσολάβησης TCP/UDP. Είναι εύκολο στη χρήση και τη διαμόρφωση, με μια απλή γλώσσα διαμόρφωσης. Το Nginx είναι πλέον το προτιμώμενο λογισμικό διακομιστή ιστού για την τροφοδοσία ιστότοπων με μεγάλη φόρτωση, λόγω της επεκτασιμότητας και της απόδοσής του.

Σε αυτό το άρθρο θα συζητηθεί πώς να χρησιμοποιήσετε το Nginx ως διακομιστή HTTP, να το διαμορφώσετε για να εξυπηρετεί περιεχόμενο ιστού και να ρυθμίσετε εικονικούς κεντρικούς υπολογιστές βάσει ονόματος και να δημιουργήσετε και να εγκαταστήσετε SSL για ασφαλείς μεταδόσεις δεδομένων, συμπεριλαμβανομένου ενός αυτο-υπογεγραμμένου πιστοποιητικού στο Ubuntu και το CentOS .

Τρόπος εγκατάστασης διακομιστή Web Nginx

Αρχικά ξεκινήστε εγκαθιστώντας το πακέτο Nginx από τα επίσημα αποθετήρια χρησιμοποιώντας τον διαχειριστή πακέτων σας όπως φαίνεται.

------------ On Ubuntu ------------ 
$ sudo apt update 
$ sudo apt install nginx 

------------ On CentOS ------------
$ sudo yum update 
$ sudo yum install epel-release 
$ sudo yum install nginx 

Μετά την εγκατάσταση του πακέτου Nginx, πρέπει να ξεκινήσετε την υπηρεσία προς το παρόν, να την ενεργοποιήσετε για αυτόματη εκκίνηση κατά την εκκίνηση και να δείτε την κατάστασή της, χρησιμοποιώντας τις ακόλουθες εντολές. Σημειώστε ότι στο Ubuntu, θα πρέπει να ξεκινήσει και να ενεργοποιηθεί αυτόματα, ενώ το πακέτο είναι προεγκατεστημένο.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo systemctl status nginx

Σε αυτό το σημείο, ο διακομιστής ιστού Nginx πρέπει να είναι σε λειτουργία, μπορείτε να επαληθεύσετε την κατάσταση με την εντολή netstat.

$ sudo netstat -tlpn | grep nginx

Εάν το σύστημά σας έχει ενεργοποιημένο ένα τείχος προστασίας, πρέπει να ανοίξετε τις θύρες 80 και 443 για να επιτρέψετε την κυκλοφορία HTTP και HTTPS αντίστοιχα, μέσω αυτής, εκτελώντας.

------------ On CentOS ------------
$ sudo firewall-cmd --permanent --add-port=80/tcp
$ sudo firewall-cmd --permanent --add-port=443/tcp
$ sudo firewall-cmd --reload

------------ On Ubuntu ------------ 
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp
$ sudo ufw reload 

Η ιδανική μέθοδος για τη δοκιμή της εγκατάστασης Nginx και τον έλεγχο του εάν εκτελείται και είναι σε θέση να εξυπηρετεί ιστοσελίδες είναι ανοίγοντας ένα πρόγραμμα περιήγησης ιστού και δείχνοντας την IP του διακομιστή.

http://Your-IP-Address
OR
http://Your-Domain.com

Μια λειτουργική εγκατάσταση πρέπει να υποδεικνύεται από την ακόλουθη οθόνη.

Τρόπος ρύθμισης παραμέτρων του διακομιστή Web Nginx

Τα αρχεία διαμόρφωσης του Nginx βρίσκονται στον κατάλογο /etc/nginx και το αρχείο καθολικής διαμόρφωσης βρίσκεται στο /etc/nginx/nginx.conf τόσο στο CentOS όσο και στο Ubuntu.

Το Nginx αποτελείται από ενότητες που ελέγχονται από διάφορες επιλογές διαμόρφωσης, γνωστές ως οδηγίες. Μια οδηγία μπορεί να είναι απλή (στο όνομα της φόρμας και στις τιμές που τερματίζονται με ; ) ή μπλοκ (έχει συνημμένες επιπλέον οδηγίες χρησιμοποιώντας το {} ). Και μια οδηγία αποκλεισμού που περιέχει άλλες οδηγίες ονομάζεται πλαίσιο.

Όλες οι οδηγίες εξηγούνται αναλυτικά στην τεκμηρίωση Nginx στον ιστότοπο του έργου. Μπορείτε να ανατρέξετε σε αυτό για περισσότερες πληροφορίες.

Σε θεμελιώδες επίπεδο, το Nginx μπορεί να χρησιμοποιηθεί για την εξυπηρέτηση στατικού περιεχομένου όπως αρχεία HTML και πολυμέσων, σε αυτόνομη λειτουργία, όπου χρησιμοποιείται μόνο το προεπιλεγμένο μπλοκ διακομιστή (ανάλογο με το Apache όπου δεν έχουν ρυθμιστεί εικονικοί κεντρικοί υπολογιστές).

Θα ξεκινήσουμε εξηγώντας εν συντομία τη δομή διαμόρφωσης στο κύριο αρχείο διαμόρφωσης.

 
$ sudo vim /etc/nginx/nginx.conf

Εάν εξετάσετε αυτό το αρχείο διαμόρφωσης Nginx, η δομή διαμόρφωσης θα πρέπει να εμφανίζεται ως εξής και αυτό αναφέρεται ως το κύριο πλαίσιο, το οποίο περιέχει πολλές άλλες απλές και αποκλειστικές οδηγίες. Όλη η κυκλοφορία Ιστού αντιμετωπίζεται στο πλαίσιο http.

user  nginx;
worker_processes  1;
.....

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
.....

events {
       	.....
}

http {
	server{
		…….
	}
	.....
}

Ακολουθεί ένα δείγμα αρχείου κύριας διαμόρφωσης Nginx (/etc/nginx/nginx.conf), όπου το μπλοκ http παραπάνω περιέχει μια οδηγία συμπερίληψης που λέει στο Nginx πού να βρει αρχεία διαμόρφωσης ιστότοπου (εικονικές διαμορφώσεις κεντρικού υπολογιστή).

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
	
    include /etc/nginx/conf.d/*.conf;
}

Σημειώστε ότι στο Ubuntu, θα βρείτε επίσης μια πρόσθετη οδηγία συμπερίληψης (include/etc/nginx/sites-enabled/*;), όπου ο κατάλογος/etc/nginx/sites-enabled/αποθηκεύει συνδέσμους στα αρχεία διαμόρφωσης ιστότοπων που δημιουργήθηκαν στο/etc/nginx/sites-available /, για να ενεργοποιήσετε τους ιστότοπους. Και η διαγραφή ενός symlink απενεργοποιεί τον συγκεκριμένο ιστότοπο.

Με βάση την πηγή εγκατάστασης, θα βρείτε το προεπιλεγμένο αρχείο διαμόρφωσης ιστότοπου στο /etc/nginx/conf.d/default.conf (εάν εγκαταστήσατε από το επίσημο αποθετήριο NGINX και EPEL) ή/etc/nginx/sites-enabled/default (εάν εγκαταστήσατε από αποθετήρια του Ubuntu).

Αυτό είναι το δείγμα προεπιλεγμένου μπλοκ διακομιστή nginx που βρίσκεται στο /etc/nginx/conf.d/default.conf στο δοκιμαστικό σύστημα.

server {
    listen    80 default_server;
    listen    [::]:80 default_server;
    server_name    _;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
}

Μια σύντομη επεξήγηση των οδηγιών στην παραπάνω διαμόρφωση:

  • listen: specifies the port the server listens on.
  • server_name: defines the server name which can be exact names, wildcard names, or regular expressions.
  • root: specifies the directory out of which Nginx will serve web pages and other documents.
  • index: specifies the type(s) of index file(s) to be served.
  • location: used to process requests for specific files and folders.

Από ένα πρόγραμμα περιήγησης ιστού, όταν οδηγείτε στο διακομιστή χρησιμοποιώντας το όνομα κεντρικού υπολογιστή localhost ή τη διεύθυνση IP του, επεξεργάζεται το αίτημα και εξυπηρετεί το αρχείο /var/www/html/index.html και αποθηκεύει αμέσως το συμβάν στο αρχείο καταγραφής πρόσβασης (/ var/log/nginx/access.log) με απόκριση 200 (OK). Σε περίπτωση σφάλματος (αποτυχημένο συμβάν), καταγράφει το μήνυμα στο αρχείο καταγραφής σφαλμάτων (/var/log/nginx/error.log).

Για να μάθετε περισσότερα σχετικά με τη σύνδεση στο Nginx, μπορείτε να ανατρέξετε στο Τρόπος ρύθμισης παραμέτρων προσαρμοσμένης πρόσβασης ή μορφών καταγραφής σφαλμάτων στο Nginx.

Αντί να χρησιμοποιήσετε τα προεπιλεγμένα αρχεία καταγραφής, μπορείτε να ορίσετε προσαρμοσμένα αρχεία καταγραφής για διαφορετικούς ιστότοπους, όπως θα εξετάσουμε αργότερα, στην ενότητα "Ρύθμιση εικονικών κεντρικών υπολογιστών βάσει ονομάτων (μπλοκ διακομιστή)".

Για να περιορίσετε την πρόσβαση στον ιστότοπο/την εφαρμογή σας ή σε ορισμένα μέρη αυτής, μπορείτε να ρυθμίσετε τον βασικό έλεγχο ταυτότητας HTTP. Αυτό μπορεί να χρησιμοποιηθεί ουσιαστικά για τον περιορισμό της πρόσβασης σε ολόκληρο τον διακομιστή HTTP, μεμονωμένα μπλοκ διακομιστή ή μπλοκ τοποθεσίας.

Ξεκινήστε δημιουργώντας ένα αρχείο που θα αποθηκεύσει τα διαπιστευτήριά σας πρόσβασης (όνομα χρήστη/κωδικό πρόσβασης) χρησιμοποιώντας το βοηθητικό πρόγραμμα htpasswd.

 
$ yum install httpd-tools		#RHEL/CentOS
$ sudo apt install apache2-utils	#Debian/Ubuntu

Για παράδειγμα, ας προσθέσουμε διαχειριστή χρήστη σε αυτήν τη λίστα (μπορείτε να προσθέσετε όσο το δυνατόν περισσότερους χρήστες), όπου η επιλογή -c χρησιμοποιείται για τον καθορισμό του αρχείου κωδικού πρόσβασης και το -B για κρυπτογράφηση του κωδικού πρόσβασης. Μόλις πατήσετε [Enter], θα σας ζητηθεί να εισαγάγετε τον κωδικό πρόσβασης χρήστη:

$ sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin

Στη συνέχεια, ας αντιστοιχίσουμε τα κατάλληλα δικαιώματα και την ιδιοκτησία στο αρχείο κωδικού πρόσβασης (αντικαταστήστε τον χρήστη και την ομάδα nginx με δεδομένα www στο Ubuntu).

$ sudo chmod 640 /etc/nginx/conf.d/.htpasswd
$ sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd

Όπως αναφέραμε νωρίτερα, μπορείτε να περιορίσετε την πρόσβαση στον διακομιστή ιστού σας, σε έναν ιστότοπο (χρησιμοποιώντας το μπλοκ διακομιστή του) ή σε συγκεκριμένο κατάλογο ή αρχείο. Μπορούν να χρησιμοποιηθούν δύο χρήσιμες οδηγίες για να επιτευχθεί αυτό:

  • auth_basic – turns on validation of user name and password using the “HTTP Basic Authentication” protocol.
  • auth_basic_user_file – specifies the credential’s file.

Για παράδειγμα, θα δείξουμε πώς να προστατεύουμε με κωδικό πρόσβασης τον κατάλογο/var/www/html/protected.

server {
    listen         80 default_server;
    server_name    localhost;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
    location /protected/ {
        auth_basic              "Restricted Access!";
        auth_basic_user_file    /etc/nginx/conf.d/.htpasswd;
    }
}

Τώρα, αποθηκεύστε τις αλλαγές και επανεκκινήστε την υπηρεσία Nginx.

$ sudo systemctl restart nginx 

Την επόμενη φορά που θα οδηγείτε το πρόγραμμα περιήγησής σας στον παραπάνω κατάλογο (http:/localhost/protected) θα σας ζητηθεί να εισαγάγετε τα διαπιστευτήρια σύνδεσης (διαχειριστής ονόματος χρήστη και τον επιλεγμένο κωδικό πρόσβασης).

Η επιτυχής σύνδεση σάς επιτρέπει να έχετε πρόσβαση στα περιεχόμενα του καταλόγου, διαφορετικά θα εμφανιστεί ένα σφάλμα "Απαιτείται εξουσιοδότηση 401".

Τρόπος ρύθμισης εικονικών κεντρικών υπολογιστών βάσει ονομάτων (μπλοκ διακομιστή) στο Nginx

Το περιβάλλον του διακομιστή επιτρέπει την αποθήκευση και την εξυπηρέτηση πολλών τομέων/ιστότοπων από τον ίδιο φυσικό υπολογιστή ή εικονικό ιδιωτικό διακομιστή (VPS). Πολλά μπλοκ διακομιστή (που αντιπροσωπεύουν εικονικούς κεντρικούς υπολογιστές) μπορούν να δηλωθούν εντός του περιβάλλοντος http για κάθε ιστότοπο/τομέα. Το Nginx αποφασίζει ποιος διακομιστής επεξεργάζεται ένα αίτημα με βάση την κεφαλίδα του αιτήματος που λαμβάνει.

Θα επιδείξουμε αυτήν την ιδέα χρησιμοποιώντας τους ακόλουθους εικονικούς τομείς, ο καθένας βρίσκεται στον καθορισμένο κατάλογο:

  • wearetecmint.com – /var/www/html/wearetecmint.com/
  • welovelinux.com – /var/www/html/welovelinux.com/

Στη συνέχεια, εκχωρήστε τα κατάλληλα δικαιώματα στον κατάλογο για κάθε ιστότοπο.

$ sudo chmod -R 755 /var/www/html/wearetecmint.com/public_html 
$ sudo chmod -R 755 /var/www/html/welovelinux.com/public_html 

Τώρα, δημιουργήστε ένα δείγμα αρχείου index.html μέσα σε κάθε κατάλογο public_html.

<html>
	<head>
		<title>www.wearetecmint.com</title>
	</head>
<body>
	<h1>This is the index page of www.wearetecmint.com</h1>
</body>
</html>

Στη συνέχεια, δημιουργήστε τα αρχεία διαμόρφωσης μπλοκ διακομιστή για κάθε ιστότοπο στον κατάλογο /etc/httpd/conf.d.

$ sudo vi /etc/nginx/conf.d/wearetecmint.com.conf
$ sudo vi /etc/nginx/conf.d/welovelinux.com.conf

Προσθέστε την ακόλουθη δήλωση μπλοκ διακομιστή στο αρχείο wearetecmint.com.conf.

server {
    listen         80;
    server_name  wearetecmint.com;
    root           /var/www/html/wearetecmint.com/public_html ;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Στη συνέχεια, προσθέστε την ακόλουθη δήλωση μπλοκ διακομιστή στο αρχείο welovelinux.com.conf.

server {
    listen         80;
    server_name    welovelinux.com;
    root           /var/www/html/welovelinux.com/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Για να εφαρμόσετε τις πρόσφατες αλλαγές, επανεκκινήστε τον διακομιστή ιστού Nginx.

$ sudo systemctl restart nginx

και η κατεύθυνση του διακομιστή ιστού σας στις παραπάνω διευθύνσεις θα σας κάνει να βλέπετε τις κύριες σελίδες των εικονικών τομέων.

http://wearetecmint.com
http://welovelinux.com

Σημαντικό: Εάν έχετε ενεργοποιήσει το SELinux, η προεπιλεγμένη διαμόρφωσή του δεν επιτρέπει στο Nginx να έχει πρόσβαση σε αρχεία εκτός γνωστών εξουσιοδοτημένων τοποθεσιών (όπως/etc/nginx για διαμορφώσεις,/var/log/nginx για αρχεία καταγραφής,/var/www/html για αρχεία ιστού κ.λπ.).

Μπορείτε να το χειριστείτε απενεργοποιώντας το SELinux ή ρυθμίζοντας το σωστό περιβάλλον ασφαλείας. Για περισσότερες πληροφορίες, ανατρέξτε σε αυτόν τον οδηγό: χρησιμοποιώντας το Nginx και το Nginx Plus με το SELinux στον ιστότοπο του Nginx Plus.

Πώς να εγκαταστήσετε και να ρυθμίσετε το SSL με το Nginx

Τα πιστοποιητικά SSL συμβάλλουν στην ενεργοποίηση του ασφαλούς http (HTTPS) στον ιστότοπό σας, το οποίο είναι απαραίτητο για τη δημιουργία αξιόπιστης/ασφαλούς σύνδεσης μεταξύ των τελικών χρηστών και του διακομιστή σας κρυπτογραφώντας τις πληροφορίες που μεταδίδονται από, από ή εντός του ιστότοπού σας.

Θα καλύψουμε τον τρόπο δημιουργίας και εγκατάστασης ενός αυτο-υπογεγραμμένου πιστοποιητικού και θα δημιουργήσουμε ένα αίτημα υπογραφής πιστοποιητικού (CSR) για την απόκτηση πιστοποιητικού SSL από μια αρχή έκδοσης πιστοποιητικών (CA), για χρήση με το Nginx.

Τα αυτο-υπογεγραμμένα πιστοποιητικά είναι ελεύθερα να δημιουργηθούν και είναι πρακτικά καλό για δοκιμές και για εσωτερικές υπηρεσίες μόνο LAN. Για διακομιστές που αντιμετωπίζουν το κοινό, συνιστάται ιδιαίτερα να χρησιμοποιείτε ένα πιστοποιητικό που εκδίδεται από μια ΑΠ (για παράδειγμα, Let’s Encrypt) για να διατηρηθεί η αυθεντικότητά της.

Για να δημιουργήσετε ένα αυτο-υπογεγραμμένο πιστοποιητικό, δημιουργήστε πρώτα έναν κατάλογο όπου θα αποθηκεύονται τα πιστοποιητικά σας.

$ sudo mkdir /etc/nginx/ssl-certs/

Στη συνέχεια, δημιουργήστε το αυτο-υπογεγραμμένο πιστοποιητικό και το κλειδί χρησιμοποιώντας το εργαλείο γραμμής εντολών openssl.

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt

Ας περιγράψουμε εν συντομία τις επιλογές που χρησιμοποιούνται στην παραπάνω εντολή:

  • req -X509 – shows we are creating a x509 certificate.
  • -nodes (NO DES) – means “don’t encrypt the key”.
  • -days 365 – specifies the number of days the certificate will be valid for.
  • -newkey rsa:2048 – specifies that the key generated using RSA algorithm should be 2048-bit.
  • -keyout /etc/nginx/ssl-certs/nginx.key – specifies the full path of the RSA key.
  • -out /etc/nginx/ssl-certs/nginx.crt – specifies the full path of the certificate.

Στη συνέχεια, ανοίξτε το αρχείο διαμόρφωσης εικονικού κεντρικού υπολογιστή και προσθέστε τις ακόλουθες γραμμές σε μια δήλωση μπλοκ διακομιστή που ακούει στη θύρα 443. Θα δοκιμάσουμε με το εικονικό αρχείο κεντρικού υπολογιστή /etc/nginx/conf.d/wearetecmint.com.conf.

$ sudo vi /etc/nginx/conf.d/wearetecmint.com.conf

Στη συνέχεια, προσθέστε την οδηγία ssl στο αρχείο διαμόρφωσης nginx, θα πρέπει να μοιάζει με παρακάτω.

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    
    ssl on;
    ssl_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_trusted_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl-certs/nginx.key;
    
    server_name  wearetecmint.com;
    root           /var/www/html/wearetecmint.com/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }

}

Τώρα επανεκκινήστε το Nginx και τοποθετήστε το πρόγραμμα περιήγησής σας στην ακόλουθη διεύθυνση.

https://www.wearetecmint.com

Εάν θέλετε να αγοράσετε ένα πιστοποιητικό SSL από μια ΑΠ, θα πρέπει να δημιουργήσετε ένα αίτημα υπογραφής πιστοποιητικού (CSR) όπως φαίνεται.

$ sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr

Μπορείτε επίσης να δημιουργήσετε ένα CSR από ένα υπάρχον ιδιωτικό κλειδί.

$ sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr

Στη συνέχεια, πρέπει να στείλετε το CSR που δημιουργείται σε μια αρχή έκδοσης πιστοποιητικών για να ζητήσετε την έκδοση πιστοποιητικού SSL με υπογραφή CA. Μόλις λάβετε το πιστοποιητικό σας από την ΑΠ, μπορείτε να το διαμορφώσετε όπως φαίνεται παραπάνω.

Σε αυτό το άρθρο, έχουμε εξηγήσει πώς να εγκαταστήσετε και να ρυθμίσετε τις παραμέτρους του Nginx. κάλυψε τον τρόπο ρύθμισης εικονικής φιλοξενίας βάσει ονόματος με SSL για την ασφαλή μετάδοση δεδομένων μεταξύ του διακομιστή Ιστού και ενός πελάτη.

Εάν αντιμετωπίσατε οποιεσδήποτε αποτυχίες κατά τη διαδικασία εγκατάστασης/διαμόρφωσης του nginx ή έχετε οποιεσδήποτε ερωτήσεις ή σχόλια, χρησιμοποιήστε την παρακάτω φόρμα σχολίων για να επικοινωνήσετε μαζί μας.