Apache vs Nginx

27/05/2019 / Apache Nginx
apache-vs-nginx

Οι Apache και Nginx είναι οι δύο πιο διαδεδομένοι open source web server . Αν και είναι και οι 2 web servers και ως επόμενο έχουν πολλά κοινά , έχουν και μερικές διαφορές οι οποίες καθιστούν τον εναν προτιμότερου του άλλου , ανάλογα με τις ανάγκες μας .

 

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

O Apache HTTP Server δημιουργήθηκε απο τον Robert McCool to 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 δουλέυει πολύ γρήγορα . ‘οταν όμως ο αριθμός των reuqests ξεπεράσει τον αριθμό των threads , τότε η απόδοση πέφτει δραστικά .

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

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

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

 

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

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

Ο  Apache μπορεί επίσης να χειριστεί δυναμικό περιεχόμενο

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

Ο 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 που χρησιμοποιεί μπλοκ ή , ενώ χρησιμοποιεί μπλοκ για πιο αφηρημένους πόρους.

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

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

Ο 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 , και τα πρωτερήματα του καθενός , δεν είναι πάντα υποχρεωτικό να χρησιμοποιούμε μόνο έναν απο τους 2 .

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

ΣΥΝΔΕΣΗ

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

ΠΑΝΩ