Apache vs Nginx

06/11/2023 / Apache Nginx
apache-vs-nginx

Οι Apache και Nginx είναι οι δύο πιο διαδεδομένοι open source web servers. Ποιες είναι οι διαφορές οι οποίες καθιστούν τον έναν προτιμότερο του άλλου;

 

Γενικές Πληροφορίες

O Apache HTTP Server δημιουργήθηκε από τον Robert McCool τo 1995, ενώ από το 1999 και μετά αναπτύσσεται υπό την καθοδήγηση του Apache Software Foundation. ‘Εκτοτε είναι ο πιο διαδεδομένος web server στον κόσμο. Οι admins συχνά επιλέγουν τον Apache, λόγω της ευελιξίας του και της ευρείας υποστήριξης που υπάρχει λόγω της πολύχρονης λειτουργίας του.

Ο Nginx άρχισε να αναπτύσσεται το 2002 από τον Igor Sysoev ως λύση στο πρόβλημα c10k. Η πρώτη κυκλοφορία του έγινε το 2004 και από τότε έχει γίνει πολύ δημοφιλής. Οι admins συχνά διαλέγουν τον Nginx, για την αποδοτικότητά του ακόμα και υπό συνθήκες υψηλού φόρτου.

 

Connection Handling Architecture

Ο Apache και ο Nginx χειρίζονται διαφορετικά τις συνδέσεις και το γενικότερο traffic. O Apache έχει κάποια multi-processing modules (MPMs) που καθορίζουν πώς χειρίζονται τα εισερχόμενα requests από τους clients. Αυτό επιτρέπει στους admins να κάνουν εύκολα αλλαγές στο connection handling architecture. Τα MPMs είναι τα: 

Mpm_prefork
Αυτό το module δημιουργεί διεργασίες με ένα thread για κάθε request. ‘Οσο ο αριθμός των requests είναι μικρότερος από τον αριθμό των threads, αυτό το Module δουλεύει πολύ γρήγορα. Όταν όμως ο αριθμός των requests ξεπεράσει τον αριθμό των threads, τότε η απόδοση πέφτει δραστικά.

Mpm_worker
Αυτό το module δημιουργεί διεργασίες, που κάθε μία μπορεί να χειριστεί πολλαπλά threads. Κάθε thread μπορεί να χειριστεί ένα request. Επειδή ένα thread είναι πολύ πιο αποδοτικό από μια διεργασία, o mpm_worker πραγματοποιεί καλύτερο scale από το mpm_prefork σε υψηλό νούμερο requests.

Mpm_event
Αυτό το mpm δουλεύει παρόμοια με το mpm_worker, με μία όμως διαφορά. Το worker θα κρατήσει ένα thread για μία σύνδεση, ανεξάρτητα από το αν γίνεται ένα request εκείνη τη στιγμή. Το event mpm θα κρατάει σε ξεχωριστά threads τις keep alive συνδέσεις και προωθεί σε άλλα threads τα ενεργά requests.

Το Nginx δημιουργεί worker διεργασίες, που κάθε μία μπορεί να χειριστεί χιλιάδες παράλληλες συνδέσεις.

 

Στατικό vs Δυναμικό Περιεχόμενο

Apache

Χειρίζεται το στατικό περιεχόμενο χρησιμοποιώντας συμβατικές (file-based) μεθόδους. Χρησιμοποιεί κυρίως τα MPMs που περιγράψαμε παραπάνω. 

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

Nginx

Δεν μπορεί να επεξεργαστεί δυναμικό περιεχόμενο από μόνος του. Για να χειριστεί PHP και παρόμοια requests, τα στέλνει σε έναν εξωτερικό processor και περιμένει να του τα επιστρέψει. Αυτή η διαδικασία κάνει την επεξεργασία των αιτημάτων πιο πολύπλοκη, καθώς ο admin πρέπει να ρυθμίσει τα πρωτόκολλα τα οποία χρησιμοποιεί ο Nginx για επικοινωνία.

 

Distributed vs Centralized Configuration

Apache

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

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

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

Nginx

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

 

Η πιο αξιοσημείωτη βελτίωση σε σχέση με το σύστημα .htaccess της διαμόρφωσης επιπέδου καταλόγου είναι η αυξημένη απόδοση. Για μια τυπική ρύθμιση Apache που μπορεί να επιτρέψει το .htaccess σε οποιοδήποτε κατάλογο, ο διακομιστής θα ελέγξει για αυτά τα αρχεία σε κάθε έναν από τους γονικούς καταλόγους που οδηγούν στο αρχείο που ζητήθηκε για κάθε αίτημα. Εάν κατά τη διάρκεια αυτής της αναζήτησης εντοπιστούν ένα ή περισσότερα αρχεία .htaccess, αυτά πρέπει να διαβαστούν και να ερμηνευτούν. Με το να μην επιτρέπεται η κατάργηση των καταλόγων, ο Nginx μπορεί να εξυπηρετεί αιτήματα ταχύτερα, κάνοντας μια ενιαία αναζήτηση καταλόγου και ανάγνωση αρχείου για κάθε αίτημα (υποθέτοντας ότι το αρχείο βρίσκεται στη συμβατική δομή καταλόγου).

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



File vs URI-Based Interpretation 

Apache

Παρέχει τη δυνατότητα να ερμηνεύει ένα αίτημα ως φυσική πηγή στο σύστημα αρχείων ή ως τοποθεσία URI που μπορεί να χρειαστεί μια πιο αφηρημένη αξιολόγηση. Σε γενικές γραμμές, για το παλιό Apache που χρησιμοποιεί μπλοκ ''Directory" ή "Files", ενώ χρησιμοποιεί μπλοκ "Location" για πιο αφηρημένους πόρους.

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

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

Nginx

Ο Nginx δημιουργήθηκε για να είναι διακομιστής ιστού και διακομιστής μεσολάβησης. Λόγω της αρχιτεκτονικής που απαιτείται για αυτούς τους δύο ρόλους, λειτουργεί κυρίως με URIs, μεταφράζοντας στο σύστημα αρχείων όταν είναι απαραίτητο.

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

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

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

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

 

Modules

Το σύστημα του Apache επιτρέπει δυναμικό loading και unloading των modules, ενώ τρέχει ο server. Ο πυρήνας του Apache τρέχει πάντα και ανάλογα με τις ανάγκες μας ενεργοποιεί ή απενεργοποιεί ένα module. Λόγω της ηλικίας της πλατφόρμας υπάρχει μια μεγάλη επιλογή από modules διαθέσιμη για διάφορες χρήσεις, όπως επεξεργασία δυναμικού περιεχομένου, proxying, encryption, caching κλπ.

Το σύστημα του Nginx υποστηρίζει μεν διάφορα modules, αλλά λειτουργεί διαφορετικά από ότι ο Apache. Στον Nginx δεν μπορεί να γίνει δυναμικό loading και έτσι τα modules πρέπει να επιλεγούν και να γίνουν compile μαζί με το βασικό λογισμικό του.

Αυτό για πολλούς χρήστες ίσως κάνει τον Nginx πιο δύσχρηστο έναντι του Apache. Παρ' όλα αυτά, ο Nginx διαθέτει και αυτός μεγάλη γκάμα από διαθέσιμα Modules για πολλές λειτουργίες, όπως proxying, caching κλπ.

 

Support και Documentation 

Ο Apache επειδή είναι ο πιο δημοφιλής web server όπως και ο παλαιότερος, υπάρχει για αυτόν πολύ υλικό στο διαδίκτυο, είτε από το apache foundation είτε από τρίτους. Επίσης, πολλά web project παρέχουν έτοιμα εργαλεία για να "κουμπώνουν" εύκολα με τον Apache.

Ο Nginx δημιουργήθηκε αρκετά χρόνια μετά τον Apache και επειδή στην αρχή όλο το documentation ήταν στα Ρώσικα, έχει λιγότερο υλικό διαθέσιμο για υποστήριξη. Παρ' όλα αυτά, επειδή είναι πλέον πολύ δημοφιλής, το πρόβλημα αυτό συνεχώς μειώνεται.

 

Χρήση των  Apache και Nginx μαζί

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

Πολύ συχνά χρησιμοποιούνται και οι δυο μαζί, με τον Nginx να είναι μπροστά από τον Apache και να λειτουργεί ως reverse proxy. Όλα τα client requests θα χειρίζονται από τον Nginx και έτσι εκμεταλλευόμαστε την γρήγορη ταχύτητά του και την ικανότητα του να χειριστεί πάρα πολλές συνδέσεις παράλληλα. Εκεί που ο Nginx είναι πιο αδύναμος συγκριτικά, δηλαδή στην επεξεργασία δυναμικού περιεχομένου, θα προωθεί όλα τα requests στον Apache που μπορεί να τα επεξεργαστεί natively.


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


Μάθετε περισσότερα για τις υπηρεσίες μας εδώ.

Ακολουθήστε μας σε LinkedInFacebook & Instagram για να μένετε ενημερωμένοι!

ΣΥΝΔΕΣΗ

Αίτηση επικοινωνίας

ΠΑΝΩ