Διαμόρφωση Nginx για απόδοση και ασφάλεια

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


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

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

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

Απαιτήσεις

Πρέπει να έχετε εγκαταστήσει τα ακόλουθα στο μηχάνημά σας και να βεβαιωθείτε ότι εκτελείτε αυτό το σεμινάριο σε οποιαδήποτε πλατφόρμα που βασίζεται στο Debian όπως το Ubuntu.

  • Ubuntu ή οποιαδήποτε άλλη πλατφόρμα που βασίζεται στο Debian
  • κλαίω
  • Vim (πρόγραμμα επεξεργασίας κειμένου)

Επίσης, πρέπει να εκτελέσετε ή να εκτελέσετε ορισμένες εντολές σε αυτό το σεμινάριο ως χρήστης root μέσω της εντολής sudo.

Κατανόηση της δομής του Nginx Config

Σε αυτήν την ενότητα θα δούμε τα εξής:

  • Δομή του Nginx
  • Ενότητες όπως ένα συμβάν, HTTP και αλληλογραφία
  • Έγκυρη σύνταξη του Nginx

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

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

Το κύριο αρχείο διαμόρφωσης βρίσκεται στο /etc/nginx/nginx.conf ενώ άλλα αρχεία διαμόρφωσης βρίσκονται στο / etc / nginx.

Κύριο πλαίσιο

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

Οποιεσδήποτε άλλες οδηγίες όπως ο χρήστης nginx. , Εργαζόμενοι_επεξεργασίες 1; , Error_log /var/log/nginx/error.log προειδοποίηση; και το pid /var/run/nginx.pid μπορεί να τοποθετηθεί στην κύρια ενότητα ή στο πλαίσιο.

Ωστόσο, ορισμένες από αυτές τις οδηγίες, όπως οι εργαζόμενοι_επεξεργασίες μπορούν επίσης να υπάρχουν στην ενότητα συμβάντων.

Ενότητες

Οι ενότητες στο Nginx καθορίζουν τη διαμόρφωση των ενοτήτων Nginx.

Για παράδειγμα, η ενότητα http καθορίζει τη διαμόρφωση για τη μονάδα ngx_http_core, η ενότητα συμβάντος καθορίζει τη διαμόρφωση για το ngx_event_module ενώ η ενότητα αλληλογραφίας καθορίζει τη διαμόρφωση για το ngx_mail_module.

Μπορείτε να ελέγξετε εδώ για μια πλήρη λίστα ενοτήτων στο Nginx.

Οδηγίες

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

Το Work_processes είναι ένα μεταβλητό όνομα ενώ το auto χρησιμεύει ως όρισμα.

auto_processes αυτόματη;

Οι οδηγίες τελειώνουν με ένα τελείωμα όπως φαίνεται παραπάνω.

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

  • Οι έγκυρες οδηγίες ξεκινούν με ένα μεταβλητό όνομα και στη συνέχεια ακολουθούν ένα ή περισσότερα ορίσματα
  • Όλες οι έγκυρες οδηγίες τελειώνουν με ερωτηματικό.
  • Οι ενότητες ορίζονται με σγουρά τιράντες {}
  • Μια ενότητα μπορεί να ενσωματωθεί σε μια άλλη ενότητα
  • Η διαμόρφωση εκτός οποιουδήποτε τμήματος αποτελεί μέρος της καθολικής διαμόρφωσης Nginx.
  • Οι γραμμές που ξεκινούν με το σύμβολο hash # είναι σχόλια.

Συντονισμός Nginx για απόδοση

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

Θα δούμε πώς να διαμορφώσετε:

  • Εργαζόμενοι
  • Δραστηριότητα I / O δίσκου
  • Δραστηριότητα δικτύου
  • Ρυθμιστικά
  • Συμπίεση
  • Προσωρινή αποθήκευση
  • Τέλος χρόνου

Ωστόσο, μέσα στο ενεργοποιημένο εικονικό περιβάλλον, πληκτρολογήστε τις ακόλουθες εντολές για αλλαγή στον κατάλογο Nginx και λίστα του περιεχομένου του.

cd nginx && είναι

Αναζήτηση για το φάκελο conf. Μέσα σε αυτόν τον φάκελο βρίσκεται το αρχείο nginx.conf.

Θα χρησιμοποιήσουμε αυτό το αρχείο για να διαμορφώσουμε το Nginx

Τώρα εκτελέστε τις ακόλουθες εντολές για να μεταβείτε στο φάκελο conf και να ανοίξετε το αρχείο nginx.conf με τον επεξεργαστή vim

cd conf
sudo vim nginx.conf

Ακολουθεί ένα στιγμιότυπο οθόνης για το πώς φαίνεται το αρχείο nginx.conf από προεπιλογή.

Εργαζόμενοι

Για να μπορέσουμε το Nginx να αποδώσει καλύτερα, πρέπει να διαμορφώσουμε τους εργαζόμενους στην ενότητα συμβάντων. Η διαμόρφωση των εργαζομένων Nginx σας επιτρέπει να επεξεργάζεστε αποτελεσματικά τις συνδέσεις από τους πελάτες.

Υποθέτοντας ότι δεν έχετε κλείσει το πρόγραμμα επεξεργασίας vim, πατήστε το κουμπί i στο πληκτρολόγιο για να επεξεργαστείτε το αρχείο nginx.conf.

Αντιγράψτε και επικολλήστε τα παρακάτω στην ενότητα συμβάντων όπως φαίνεται παρακάτω:

εκδηλώσεις {
auto_processes αυτόματη;
εργαζόμενοι_συνδέσεις 1024;
worker_rlimit_nofile 20960;
multi_accept on;
mutex_accept στις;
mutex_accept_delay 500ms;
χρησιμοποιήστε epoll;
epoll_events 512;
}

worker_processes: Αυτή η οδηγία ελέγχει τον αριθμό των εργαζομένων στο Nginx. Η τιμή αυτής της οδηγίας ορίζεται αυτόματα για να επιτρέψει στο Nginx να προσδιορίσει τον αριθμό των διαθέσιμων πυρήνων, δίσκων, φορτίου διακομιστή και υποσυστήματος δικτύου. Ωστόσο, μπορείτε να ανακαλύψετε τον αριθμό των πυρήνων εκτελώντας την εντολή lscpu στο τερματικό.

worker_connections: Αυτή η οδηγία ορίζει την τιμή του αριθμού ταυτόχρονης σύνδεσης που μπορεί να ανοίξει ένας εργαζόμενος. Η προεπιλεγμένη τιμή είναι 512 αλλά την ορίσαμε σε 1.024 για να επιτρέψουμε σε έναν εργαζόμενο να αποδεχτεί μια ταυτόχρονη σύνδεση από έναν πελάτη.

worker_rlimit_nofile: Αυτή η οδηγία σχετίζεται με κάποιο τρόπο με τις εργαζόμενες συνδέσεις. Για να χειριστούμε μεγάλη ταυτόχρονη σύνδεση, την ορίζουμε σε μεγάλη τιμή.

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

mutex_accept: Αυτή η οδηγία είναι απενεργοποιημένη από προεπιλογή. Αλλά επειδή έχουμε διαμορφώσει πολλούς εργαζόμενους στο Nginx, πρέπει να το ενεργοποιήσουμε όπως φαίνεται στον παραπάνω κώδικα για να επιτρέψουμε στους εργαζόμενους να δέχονται νέες συνδέσεις μία προς μία.

mutex_accept_delay: Αυτή η οδηγία καθορίζει πόσο καιρό πρέπει να περιμένει ένας εργαζόμενος πριν αποδεχτεί μια νέα σύνδεση. Μόλις ενεργοποιηθεί το accept_mutex, ένα κλείδωμα mutex εκχωρείται σε έναν εργαζόμενο για ένα χρονικό πλαίσιο που καθορίζεται από το accept_mutex_delay. Όταν τελειώσει το χρονικό πλαίσιο, ο επόμενος εργαζόμενος στη γραμμή είναι έτοιμος να δεχτεί νέες συνδέσεις.

χρήση: Αυτή η οδηγία καθορίζει τη μέθοδο επεξεργασίας μιας σύνδεσης από τον πελάτη. Σε αυτό το σεμινάριο, αποφασίσαμε να ορίσουμε την τιμή σε epoll επειδή εργαζόμαστε σε μια πλατφόρμα Ubuntu. Η μέθοδος epoll είναι η πιο αποτελεσματική μέθοδος επεξεργασίας για πλατφόρμες Linux.

epoll_events: Η τιμή αυτής της οδηγίας καθορίζει τον αριθμό των συμβάντων που θα μεταφέρει το Nginx στον πυρήνα.

Δίσκος I / O

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

Ο δίσκος I / O αναφέρεται απλώς σε λειτουργίες εγγραφής και ανάγνωσης μεταξύ του σκληρού δίσκου και της μνήμης RAM. Θα κάνουμε χρήση του αποστολή αρχείου() λειτουργία μέσα στον πυρήνα για την αποστολή μικρών αρχείων.

Μπορείτε να χρησιμοποιήσετε την ενότητα http, την ενότητα τοποθεσίας και την ενότητα διακομιστή για οδηγίες σε αυτήν την περιοχή.

Η ενότητα τοποθεσίας, η ενότητα διακομιστή μπορούν να ενσωματωθούν ή να τοποθετηθούν στην ενότητα http για να καταστήσει τη διαμόρφωση ευανάγνωστη.

Αντιγράψτε και επικολλήστε τον ακόλουθο κώδικα μέσα στην ενότητα τοποθεσίας που είναι ενσωματωμένη στην ενότητα HTTP.

τοποθεσία / pdf / {
το sendfile on;
aio on;
}

τοποθεσία / ήχος / {
σκηνοθεσία 4μ
ευθυγράμμιση 512
}

sendfile: Για να χρησιμοποιήσετε πόρους λειτουργικού συστήματος, ενεργοποιήστε την τιμή αυτής της οδηγίας. Το sendfile μεταφέρει δεδομένα μεταξύ περιγραφικών αρχείων εντός του χώρου του πυρήνα του λειτουργικού συστήματος χωρίς να τα στέλνει στα buffer της εφαρμογής. Αυτή η οδηγία θα χρησιμοποιηθεί για την εξυπηρέτηση μικρών αρχείων.

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

aio: Αυτή η οδηγία επιτρέπει το multi-threading όταν είναι ενεργοποιημένο για λειτουργία εγγραφής και ανάγνωσης. Το Multi-threading είναι ένα μοντέλο εκτέλεσης που επιτρέπει σε πολλά νήματα να εκτελούνται ξεχωριστά το ένα από το άλλο ενώ μοιράζονται τους πόρους της διαδικασίας φιλοξενίας.

directio_alignment: Αυτή η οδηγία εκχωρεί μια τιμή μεγέθους μπλοκ στη μεταφορά δεδομένων. Σχετίζεται με την οδηγία directio.

Επίπεδο δικτύου

Σε αυτήν την ενότητα, θα χρησιμοποιήσουμε οδηγίες όπως tcp_nodelay και tcp_nopush για να αποτρέψουμε την αναμονή μικρών πακέτων από ένα καθορισμένο χρονικό πλαίσιο περίπου 200 χιλιοστών του δευτερολέπτου πριν από την αποστολή τους ταυτόχρονα.

Συνήθως, όταν τα πακέτα μεταφέρονται σε «κομμάτια», τείνουν να κορεστούν το πολύ φορτωμένο δίκτυο. Έτσι ο John Nagle έχτισε ένα αλγόριθμος buffering για να επιλύσετε αυτό το ζήτημα. Ο σκοπός του αλγορίθμου buffering του Nagle είναι να αποτρέψει την κορεσμό μικρών πακέτων από το πολύ φορτωμένο δίκτυο.

Αντιγράψτε και επικολλήστε τον ακόλουθο κώδικα μέσα στην ενότητα HTTP.

http {

tcp_nopush on;
tcp_nodelay on;

}

tcp_nodelay: Αυτή η οδηγία, από προεπιλογή, είναι απενεργοποιημένη για να επιτρέπει σε μικρά πακέτα να περιμένουν μια καθορισμένη περίοδο προτού αποσταλούν ταυτόχρονα. Για να επιτρέψετε την αποστολή όλων των δεδομένων ταυτόχρονα, αυτή η οδηγία είναι ενεργοποιημένη.

tcp_nopush: Επειδή έχουμε ενεργοποιήσει την οδηγία tcp_nodelay, τα μικρά πακέτα αποστέλλονται ταυτόχρονα. Ωστόσο, εάν εξακολουθείτε να θέλετε να χρησιμοποιήσετε τον αλγόριθμο buffering του John Nagle, μπορούμε επίσης να επιτρέψουμε στο tcp_nopush να προσθέσει πακέτα μεταξύ τους και να τα στείλει όλα ταυτόχρονα.

Ρυθμιστικά

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

Μπορείτε να αντιγράψετε τα παρακάτω στην ενότητα διακομιστή.

διακομιστής {

client_body_buffer_size 8k;
client_max_body_size 2m;
client_body_in_single_buffer ενεργοποιημένο;
client_body_temp_pathtemp_files 1 2;
client_header_buffer_size 1m;
large_client_header_buffers 4 8 χιλ.

}

Είναι σημαντικό να κατανοήσουμε τι κάνουν αυτές οι ενδιάμεσες γραμμές.

client_body_buffer_size: Αυτή η οδηγία ορίζει το μέγεθος του buffer για το σώμα του αιτήματος. Εάν σκοπεύετε να εκτελέσετε τον διακομιστή ιστού σε συστήματα 64-bit, πρέπει να ορίσετε την τιμή στα 16k. Εάν θέλετε να εκτελέσετε τον διακομιστή ιστού στο σύστημα 32-bit, ορίστε την τιμή σε 8k.

client_max_body_size: Εάν σκοπεύετε να χειριστείτε μεγάλες μεταφορτώσεις αρχείων, πρέπει να ορίσετε αυτήν την οδηγία σε τουλάχιστον 2 μέτρα ή περισσότερο. Από προεπιλογή, ορίζεται σε 1m.

client_body_in_file_only: Εάν έχετε απενεργοποιήσει την οδηγία client_body_buffer_size με το σύμβολο hashtag # και αυτή η οδηγία client_body_in_file_only έχει οριστεί, τότε το Nginx θα αποθηκεύσει τις προσωρινές μνήμες αιτημάτων σε προσωρινό αρχείο. Αυτό δεν συνιστάται για περιβάλλον παραγωγής.

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

client_header_buffer_size: Μπορείτε να χρησιμοποιήσετε αυτήν την οδηγία για να ορίσετε ή να εκχωρήσετε ένα buffer για κεφαλίδες αιτήσεων. Μπορείτε να ορίσετε αυτήν την τιμή σε 1m.

large_client_header_buffers: Αυτή η οδηγία χρησιμοποιείται για τον καθορισμό του μέγιστου αριθμού και μεγέθους για την ανάγνωση κεφαλίδων μεγάλου αιτήματος. Μπορείτε να ορίσετε με ακρίβεια τον μέγιστο αριθμό και το μέγεθος buffer σε 4 και 8k.

Συμπίεση

Η συμπίεση του όγκου των δεδομένων που μεταφέρονται μέσω του δικτύου είναι ένας άλλος τρόπος για να εξασφαλιστεί ότι ο διακομιστής ιστού σας αποδίδει καλύτερα. Σε αυτήν την ενότητα, θα χρησιμοποιήσουμε οδηγίες όπως gzip, gzip_comp_level και gzip_min_length για τη συμπίεση δεδομένων.

Επικολλήστε τον ακόλουθο κώδικα στην ενότητα http όπως φαίνεται παρακάτω:

http {

gzip on;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_types text / xml text / css;
gzip_http_version 1.1;
gzip_vary on;
gzip_disable "MSIE [4-6] \.";

}

gzip: Εάν θέλετε να ενεργοποιήσετε τη συμπίεση, ενεργοποιήστε την τιμή αυτής της οδηγίας. Από προεπιλογή, είναι απενεργοποιημένο.

gzip_comp_level: Μπορείτε να χρησιμοποιήσετε αυτήν την οδηγία για να ορίσετε το επίπεδο συμπίεσης. Για να μην σπαταλήσετε πόρους CPU, δεν χρειάζεται να ορίσετε το επίπεδο συμπίεσης πολύ υψηλό. Μεταξύ 1 και 9, μπορείτε να ρυθμίσετε το επίπεδο συμπίεσης σε 2 ή 3.

gzip_min_length: Ορίστε το ελάχιστο μήκος απόκρισης για συμπίεση μέσω του πεδίου κεφαλίδας απόκρισης περιεχομένου. Μπορείτε να το ρυθμίσετε σε περισσότερα από 20 byte.

gzip_types: Αυτή η οδηγία σάς επιτρέπει να επιλέξετε τον τύπο απόκρισης που θέλετε να συμπιέσετε. Από προεπιλογή, το κείμενο απόκρισης / html συμπιέζεται πάντα. Μπορείτε να προσθέσετε άλλο τύπο απόκρισης, όπως κείμενο / css, όπως φαίνεται στον παραπάνω κώδικα.

gzip_http_version: Αυτή η οδηγία σάς επιτρέπει να επιλέξετε την ελάχιστη έκδοση HTTP ενός αιτήματος για συμπιεσμένη απόκριση. Μπορείτε να χρησιμοποιήσετε την προεπιλεγμένη τιμή που είναι 1.1.

gzip_vary: Όταν είναι ενεργοποιημένη η οδηγία gzip, αυτή η οδηγία προσθέτει το πεδίο κεφαλίδας Vary: Αποδοχή κωδικοποίησης στην απόκριση.

gzip_disabled: Ορισμένα προγράμματα περιήγησης όπως ο Internet Explorer 6 δεν έχουν υποστήριξη για συμπίεση gzip. Αυτή η οδηγία χρησιμοποιεί το πεδίο κεφαλίδας αιτήματος User-Agent για να απενεργοποιήσει τη συμπίεση για ορισμένα προγράμματα περιήγησης.

Προσωρινή αποθήκευση

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

Μπορείτε να τοποθετήσετε αυτήν την οδηγία μέσα στην ενότητα διακομιστή, τοποθεσίας και http.

http {

open_file_cache max = 1.000 ανενεργό = 30s;
open_file_cache_valid 30 δευτερόλεπτα;
open_file_cache_min_uses 4;
open_file_cache_errors on;

}

open_file_cache: Αυτή η οδηγία είναι απενεργοποιημένη από προεπιλογή. Ενεργοποιήστε το εάν θέλετε να εφαρμόσετε την προσωρινή αποθήκευση στο Nginx. Αυτή η οδηγία αποθηκεύει μεταδεδομένα αρχείων και καταλόγων που ζητούνται συνήθως από τους χρήστες.

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

open_file_cache_min_uses: Το Nginx συνήθως διαγράφει πληροφορίες μέσα στην οδηγία open_file_cache μετά από μια περίοδο αδράνειας βάσει του open_file_cache_min_uses. Μπορείτε να χρησιμοποιήσετε αυτήν την οδηγία για να ορίσετε έναν ελάχιστο αριθμό πρόσβασης για να προσδιορίσετε ποια αρχεία και καταλόγους έχουν ενεργή πρόσβαση.

open_file_cache_errors: Μπορείτε να χρησιμοποιήσετε αυτήν την οδηγία για να επιτρέψετε στο Nginx να αποθηκεύσει προσωρινά σφάλματα όπως “η άδεια δεν επιτρέπεται” ή “δεν είναι δυνατή η πρόσβαση σε αυτό το αρχείο” κατά την πρόσβαση στα αρχεία. Επομένως, όποτε γίνεται πρόσβαση σε έναν πόρο από έναν χρήστη που δεν έχει το δικαίωμα να το κάνει, το Nginx εμφανίζει την ίδια αναφορά σφάλματος «δεν επιτρέπεται η άδεια».

Τέλος χρόνου

Διαμορφώστε το χρονικό όριο χρησιμοποιώντας οδηγίες όπως keepalive_timeout και keepalive_requests για να αποφύγετε τη σπατάλη πόρων από τις πολυαναμενόμενες συνδέσεις.

Στην ενότητα HTTP, αντιγράψτε και επικολλήστε τον ακόλουθο κώδικα:

http {

keepalive_timeout 30s;
keepalive_requests 30;
send_timeout 30s;

}

keepalive_timeout: Διατηρήστε τις συνδέσεις ζωντανές για περίπου 30 δευτερόλεπτα. Η προεπιλογή είναι 75 δευτερόλεπτα.

keepalive_requests: Διαμορφώστε έναν αριθμό αιτημάτων για να διατηρήσετε ζωντανό για ένα συγκεκριμένο χρονικό διάστημα. Μπορείτε να ορίσετε τον αριθμό των αιτημάτων σε 20 ή 30.

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

send_timeout: Ορίστε ένα χρονικό όριο για τη μετάδοση δεδομένων στον πελάτη.

Διαμόρφωση ασφαλείας για το Nginx

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

Σε αυτήν την ενότητα θα δούμε πώς να διαμορφώσουμε τα ακόλουθα:

  • Περιορίστε την πρόσβαση σε αρχεία και καταλόγους
  • Ρυθμίστε τα αρχεία καταγραφής για να παρακολουθείτε κακόβουλες δραστηριότητες
  • Αποτροπή DDoS
  • Απενεργοποίηση καταλόγου καταλόγου

Περιορίστε την πρόσβαση σε αρχεία και καταλόγους

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

Χρησιμοποιώντας τον έλεγχο ταυτότητας HTTP

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

apt-get install -y apache-utils

Στη συνέχεια, δημιουργήστε ένα αρχείο κωδικού πρόσβασης και έναν χρήστη χρησιμοποιώντας το εργαλείο htpasswd όπως φαίνεται παρακάτω. Το εργαλείο htpasswd παρέχεται από το βοηθητικό πρόγραμμα apache2-utils.

sudo htpasswd -c / etc / apache2 / .htpasswd mike

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

cat etc / apache2 / .htpasswd

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

τοποθεσία / διαχειριστής {

basic_auth "Περιοχή διαχειριστή";
auth_basic_user_file / etc / apache2 / .htpasswd;

}

Χρησιμοποιώντας την οδηγία Allow

Εκτός από την οδηγία basic_auth, μπορούμε να χρησιμοποιήσουμε την οδηγία αδειών για να περιορίσουμε την πρόσβαση.

Μέσα στην ενότητα τοποθεσίας, μπορείτε να χρησιμοποιήσετε τον ακόλουθο κωδικό για να επιτρέψετε στις συγκεκριμένες διευθύνσεις IP να έχουν πρόσβαση σε ευαίσθητη περιοχή.

τοποθεσία / διαχειριστής {
επιτρέψτε 192.168.34.12;
επιτρέψτε 192.168.12.34;
}

Ρυθμίστε τα αρχεία καταγραφής για να παρακολουθείτε κακόβουλες δραστηριότητες

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

error_log: Σας επιτρέπει να ρυθμίσετε την καταγραφή σε ένα συγκεκριμένο αρχείο όπως το syslog ή το stderr. Μπορείτε επίσης να καθορίσετε το επίπεδο των μηνυμάτων σφάλματος που θέλετε να καταγράψετε.

access_log: Επιτρέπει την εγγραφή αιτήματος χρηστών στο αρχείο access.log

Μέσα στην ενότητα HTTP, μπορείτε να χρησιμοποιήσετε τα ακόλουθα.

http {

access_log logs / access.log σε συνδυασμό;
error_log logs / warn.log προειδοποίηση;

}

Αποτροπή DDOS

Μπορείτε να προστατεύσετε το Nginx από μια επίθεση DDOS με τις ακόλουθες μεθόδους:

Περιορισμός αιτημάτων χρηστών 

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

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

limit_req_zone $ binary_remote_addr zone = one: 10m rate = 30r / m;

διακομιστής {
τοποθεσία /admin.html {
limit_req ζώνη = ένα;
}

}

Περιορίστε τον αριθμό των συνδέσεων 

Μπορείτε να χρησιμοποιήσετε τις οδηγίες limit_conn και limit_conn_zone για να περιορίσετε τη σύνδεση σε συγκεκριμένες τοποθεσίες ή περιοχές. Για παράδειγμα, ο παρακάτω κώδικας λαμβάνει 15 σύνδεση από πελάτες για μια συγκεκριμένη περίοδο.

Ο ακόλουθος κωδικός θα μεταβεί στην ενότητα τοποθεσίας.

limit_conn_zone $ binary_remote_addr ζώνη = addr: 10m;

διακομιστής {

τοποθεσία / προϊόντα / {
limit_conn addr 10;

}
}

Τερματίστε αργές συνδέσεις   

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

Προσθέστε τα ακόλουθα μέσα στην ενότητα διακομιστή.

διακομιστής {
client_body_timeout 5 δευτερόλεπτα;
client_header_timeout 5 δευτερόλεπτα;
}

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

Απενεργοποίηση καταλόγου καταλόγου

Μπορείτε να χρησιμοποιήσετε την οδηγία auto_index για να αποτρέψετε την καταχώριση καταλόγου όπως φαίνεται στον παρακάτω κώδικα. Πρέπει να το ρυθμίσετε στην τιμή για να απενεργοποιήσετε την καταχώριση καταλόγου.

τοποθεσία / {
αυτόματο_index απενεργοποιημένο;
}

συμπέρασμα

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

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map