Εισαγωγή στο NGINX για προγραμματιστές

Φανταστείτε αυτό - έχετε δημιουργήσει μια εφαρμογή ιστού και τώρα αναζητάτε τον κατάλληλο διακομιστή ιστού για να την φιλοξενήσετε.

Η εφαρμογή σας μπορεί να αποτελείται από πολλά στατικά αρχεία - HTML, CSS και JavaScript, μια υπηρεσία API backend ή ακόμα και πολλές υπηρεσίες ιστού. Η χρήση του Nginx μπορεί να είναι αυτό που ψάχνετε και υπάρχουν δύο λόγοι για αυτό.

Το NGINX είναι ένας ισχυρός διακομιστής ιστού και χρησιμοποιεί μια μη-νηματοποιημένη αρχιτεκτονική συμβάντων που του επιτρέπει να ξεπερνά το Apache εάν έχει ρυθμιστεί σωστά. Μπορεί επίσης να κάνει άλλα σημαντικά πράγματα, όπως εξισορρόπηση φορτίου, προσωρινή αποθήκευση HTTP ή να χρησιμοποιηθεί ως αντίστροφος διακομιστής μεσολάβησης.

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

Βασική εγκατάσταση - Αρχιτεκτονική

Υπάρχουν δύο τρόποι για να εγκαταστήσετε το NGINX, είτε χρησιμοποιώντας ένα προ-ενσωματωμένο δυαδικό είτε δημιουργώντας το από την πηγή.

Η πρώτη μέθοδος είναι πολύ ευκολότερη και ταχύτερη, αλλά η δημιουργία της από την πηγή παρέχει τη δυνατότητα να συμπεριληφθούν διάφορες ενότητες τρίτων που κάνουν το NGINX ακόμα πιο ισχυρό. Μας επιτρέπει να το προσαρμόσουμε ώστε να ταιριάζει στις ανάγκες της εφαρμογής.

Για να εγκαταστήσετε ένα προεγκατεστημένο πακέτο Debian, το μόνο που έχετε να κάνετε είναι:

sudo apt-get updatesudo apt-get install nginx

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

sudo nginx -vnginx version: nginx/1.6.2

Ο νέος σας διακομιστής ιστού θα εγκατασταθεί στην τοποθεσία . Εάν μπείτε μέσα σε αυτόν το φάκελο, θα δείτε πολλά αρχεία και φακέλους. Τα πιο σημαντικά που θα απαιτήσουν την προσοχή μας αργότερα είναι το αρχείο και ο φάκελος ./etc/nginx/nginx.confsites-available

Ρυθμίσεις διαμόρφωσης

Οι βασικές ρυθμίσεις του NGINX βρίσκονται στο nginx.confαρχείο, το οποίο από προεπιλογή μοιάζει με αυτό.

user www-data;worker_processes 4;pid /run/nginx.pid;events { worker_connections 768; # multi_accept on;}http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; gzip_disable "msie6"; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;}

Το αρχείο διαρθρώνεται σε Πλαίσια . Το πρώτο είναι το συμβάν Context και το δεύτερο είναι το http Context. Αυτή η δομή επιτρέπει κάποια προηγμένη στρώση της διαμόρφωσής σας, καθώς κάθε περιβάλλον μπορεί να έχει άλλα ένθετα περιβάλλοντα που κληρονομούν τα πάντα από τον γονέα τους, αλλά μπορούν επίσης να παρακάμψουν μια ρύθμιση όπως απαιτείται.

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

  • worker_processes: Αυτή η ρύθμιση καθορίζει τον αριθμό των διεργασιών εργαζομένων που θα χρησιμοποιεί το NGINX. Επειδή το NGINX είναι απλό νήμα, αυτός ο αριθμός πρέπει συνήθως να είναι ίσος με τον αριθμό των πυρήνων της CPU.
  • pekerja_συνδέσεις: Αυτός είναι ο μέγιστος αριθμός ταυτόχρονων συνδέσεων για κάθε διεργασία εργαζομένου και ενημερώνει τον εργαζόμενο μας σχετικά με το πόσα άτομα μπορούν να εξυπηρετηθούν ταυτόχρονα από το NGINX. Όσο μεγαλύτερο είναι, τόσο πιο ταυτόχρονοι χρήστες θα μπορούν να εξυπηρετούν το NGINX.
  • access_log & error_log: Αυτά είναι τα αρχεία που θα χρησιμοποιήσει το NGINX για να καταγράψει τυχόν σφάλματα και απόπειρες πρόσβασης. Αυτά τα αρχεία καταγραφής ελέγχονται γενικά για εντοπισμό σφαλμάτων και αντιμετώπιση προβλημάτων.
  • gzip: Αυτές είναι οι ρυθμίσεις για τη συμπίεση GZIP των αποκρίσεων NGINX. Η ενεργοποίηση αυτού μαζί με τις διάφορες δευτερεύουσες ρυθμίσεις που εξ ορισμού σχολιάζονται θα οδηγήσει σε μια αρκετά μεγάλη αναβάθμιση απόδοσης Από τις δευτερεύουσες ρυθμίσεις του GZIP, πρέπει να ληφθεί μέριμνα για το gzip_comp_level, το οποίο είναι το επίπεδο συμπίεσης και κυμαίνεται από 1 έως 10. Γενικά, αυτή η τιμή δεν πρέπει να είναι πάνω από 6 - το κέρδος από άποψη μείωσης μεγέθους είναι ασήμαντο, καθώς χρειάζεται πολύ περισσότερη χρήση CPU. Το gzip_types είναι μια λίστα με τους τύπους απόκρισης στους οποίους θα εφαρμοστεί η συμπίεση.

Η εγκατάσταση του NGINX μπορεί να υποστηρίξει πολύ περισσότερα από έναν ιστότοπο και τα αρχεία που ορίζουν τους ιστότοπους του διακομιστή σας βρίσκονται στον κατάλογο / etc / nginx / sites-available.

Ωστόσο, τα αρχεία σε αυτόν τον κατάλογο δεν είναι "ζωντανά" - μπορείτε να έχετε όσα αρχεία ορισμού ιστότοπου εδώ θέλετε, αλλά το NGINX δεν θα κάνει τίποτα μαζί τους, εκτός εάν είναι συνδεδεμένα στο / etc / nginx / Κατάλογος με δυνατότητα ιστότοπων (θα μπορούσατε επίσης να τους αντιγράψετε εκεί, αλλά η σύνδεση μέσω σύνδεσης διασφαλίζει ότι υπάρχει μόνο ένα αντίγραφο κάθε αρχείου για παρακολούθηση)

Αυτό σας δίνει μια μέθοδο για να τοποθετήσετε γρήγορα ιστότοπους στο διαδίκτυο και να τους μεταφέρετε εκτός σύνδεσης χωρίς να χρειάζεται να διαγράψετε πραγματικά αρχεία - όταν είστε έτοιμοι για έναν ιστότοπο για σύνδεση, συνδέστε τον σε ιστότοπους με δυνατότητα ενεργοποίησης και επανεκκινήστε το NGINX

Ο sites-availableκατάλογος περιλαμβάνει διαμορφώσεις για εικονικούς κεντρικούς υπολογιστές. Αυτό επιτρέπει στο διακομιστή ιστού να ρυθμιστεί για πολλούς ιστότοπους που έχουν ξεχωριστές διαμορφώσεις. Οι ιστότοποι σε αυτόν τον κατάλογο δεν είναι διαθέσιμοι και ενεργοποιούνται μόνο εάν δημιουργήσουμε έναν συμβολικό σύνδεσμο στον sites-enabledφάκελο.

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

upstream remoteApplicationServer { server 10.10.10.10;}upstream remoteAPIServer { server 20.20.20.20; server 20.20.20.21; server 20.20.20.22; server 20.20.20.23;}server { listen 80; server_name www.customapp.com customapp.com root /var/www/html; index index.html location / { alias /var/www/html/customapp/; try_files $uri $uri/ =404; } location /remoteapp { proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass //remoteAPIServer/; } location /api/v1/ { proxy_pass //remoteAPIServer/api/v1/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_redirect // //; }}

Μοιάζει πολύ με nginx.confαυτό, χρησιμοποιεί επίσης την έννοια των ένθετων πλαισίων (και όλα αυτά είναι ένθετα μέσα στο περιβάλλον HTTP του nginx.conf, έτσι κληρονομούν επίσης τα πάντα από αυτό).

Το περιβάλλον διακομιστή ορίζει έναν συγκεκριμένο εικονικό διακομιστή για τον χειρισμό των αιτήσεων των πελατών σας. Μπορείτε να έχετε πολλά μπλοκ διακομιστή και το NGINX θα επιλέξει μεταξύ τους με βάση τις οδηγίες listenκαι τις server_nameοδηγίες.

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

Υπάρχουν πολλές σημαντικές οδηγίες που μπορούν να χρησιμοποιηθούν στο πλαίσιο της τοποθεσίας, όπως:

  • Το try_files θα προσπαθήσει να εξυπηρετήσει ένα στατικό αρχείο που βρίσκεται κάτω από το φάκελο που οδηγεί στην ριζική οδηγία.
  • Το proxy_pass θα στείλει το αίτημα σε έναν καθορισμένο διακομιστή μεσολάβησης.
  • rewrite θα ξαναγράψει το εισερχόμενο URI με βάση μια κανονική έκφραση, έτσι ώστε ένα άλλο μπλοκ τοποθεσίας θα είναι σε θέση να το χειριστεί.

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

Ξεκινήστε το NGINX

Αφού ολοκληρώσουμε τη διαμόρφωση και μεταφέρουμε την εφαρμογή ιστού στον κατάλληλο φάκελο, μπορούμε να ξεκινήσουμε το NGINX χρησιμοποιώντας την παρακάτω εντολή:

sudo service nginx start

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

service nginx reload

Τέλος, μπορούμε να ελέγξουμε την κατάσταση του NGINX χρησιμοποιώντας την παρακάτω εντολή.

service nginx status

συμπέρασμα

Με τόσες πολλές δυνατότητες εκτός λειτουργίας, το NGINX μπορεί να είναι ένας πολύ καλός τρόπος για την εξυπηρέτηση της εφαρμογής σας ή ακόμη και για χρήση ως διακομιστής μεσολάβησης HTTP ή εξισορρόπησης φόρτου για τους άλλους διακομιστές ιστού σας. Η κατανόηση του τρόπου με τον οποίο το NGINX λειτουργεί και χειρίζεται αιτήματα θα δώσει μεγάλη δύναμη στην κλιμάκωση και εξισορρόπηση του φορτίου των εφαρμογών σας.