Λογότυπο NginxΤο Nginx είναι ένας κεντρικός υπολογιστής δικτύου υψηλής επίδοσης και κεντρικός υπολογιστής πληρεξούσιου ταχυδρομείου που γράφονται από το Igor Sysoev και μια καλή αντικατάσταση για Apache HTTPD, ο πρωτοπόρος στην αγορά. Το Nginx αυξάνει γρήγορα το μερίδιο αγοράς του με σημαντικούς ιστοχώρους ενώνοντας το όπως το wordpress.com. Στην έρευνα Ιουνίου 2008 Netcraft LiteSpeed έχασε περισσότερες από 600 χιλιάες περιοχές κατά τη διάρκεια αυτής της έρευνας, ενώ nginx κερδίζεται περισσότερες από εκατομμύριο περιοχές περισσότερο από διπλασιαμένος στους αριθμούς. Το blogging σύστημα WordPress μετέτρεψε πρόσφατα όλα balancers φορτίων του στο nginx, χρησιμοποιώντας την προς τα πάνω hash ενότητα για να εξυπηρετήσει 8-9 χιλιάες αιτήματα ανά δευτερόλεπτο. Επίσης έχουμε αποφασίσει να κινήσουμε μερικοί από τους ιστοχώρους μας προς Nginx. Εδώ είναι λίγες ουσιαστικές άκρες και γενικές οδηγίες για τη διαμόρφωση Nginx. Αυτό δεν είναι υποκατάστατο της ανάγνωσης της τεκμηρίωσης (rtfm). Εντούτοις όταν κολλιέστε ακόμα και μετά από την ανάγνωση και να ξαναδιαβάσετε της τεκμηρίωσης nginx κατόπιν διαβάζεστε κατωτέρω. Θα καταλάβετε την αξία των ακρών κατωτέρω μόνο έπειτα :)

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

Σημείωση: Στην εικονική φιλοξενία χρησιμοποιείτε την ίδια διεύθυνση IP για τους πολλαπλάσιους ιστοχώρους. Κάθε ιστοχώρος θα έχει πιθανότατα χωριστό .htaccess (που υποθέτει φιλοξενηθήκατε αρχικά στον κεντρικό υπολογιστή δικτύου Apache HTTPD) αρχεία, χωριστός κατάλογος κ.λπ. ρίζας Παραδείγματος χάριν σε έναν ιστοχώρο έχετε wordpress, ενώ σε άλλος μπορείτε να έχετε MODx και ποιος ξέρει ίσως phpBB στο τρίτο. Όλες αυτές οι διαφορετικές οδηγίες .htaccess πρέπει να πάνε στο αρχείο διαμόρφωσης nginx.

Το Nginx έχει έναν σημαντικό περιορισμό να αναθεωρήσει μέσα τους κανόνες δεδομένου ότι δεν μπορείτε να επιβάλετε τους πολλαπλάσιους όρους για αναθεωρείτε τον κανόνα. Το Apache HTTPD αφ' ενός παρέχει μια καλή λύση χρησιμοποιώντας τις πολλαπλάσιες οδηγίες RewriteCond.

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

εάν ($request_method! ~ ^ (ΠΆΡΤΕ|ΚΕΦΑΛΙ) $) {
    επιστροφή 501 
}

Εντούτοις δεν μπορείτε να ελέγξετε δύο μεταβλητές τη φορά. Ειδικά στο εικονικό σενάριο φιλοξενίας τέτοιοι περιορισμοί μπορούν συχνά να θεωρηθούν ως showstoppers. Εντούτοις διαπίστωσα ότι με λίγα που σκέφτονται επιπλέον μπορείτε να βρείτε τις καινοτόμες λύσεις να εξυπηρετήσετε τις πρόσθετες ανάγκες σας. Παραδείγματος χάριν ένας πολύ κοινός κανόνας .htaccess για πολύ βασισμένο στα πέσος Φιλιππίνων λογισμικό Ιστού συμπεριλαμβανομένου wordpress είναι:

RewriteEngine επάνω
RewriteBase/
RewriteCond % {REQUEST_FILENAME}! - φ
RewriteCond % {REQUEST_FILENAME}! - δ
RewriteRule. /index.php [Λ]

Λέει ότι εάν το ζητούμενο όνομα αρχείου δεν είναι παρόν και δεν είναι επίσης ένας κατάλογος κατόπιν επικαλεσθείτε index.php αντ' αυτού.

Εντούτοις ενώ το RewriteCond είναι το ίδιο για το περισσότερο βασισμένο στα πέσος Φιλιππίνων λογισμικό το RewriteRule δεν είναι. Παραδείγματος χάριν μια μερίδα αναθεωρεί τους κανόνες γιατί το phpBB είναι:

RewriteCond % {REQUEST_FILENAME}! - φ
RewriteCond % {REQUEST_FILENAME}! - δ
RewriteCond % {REQUEST_FILENAME}! - λ
RewriteRule ^ [a-z0-9_-] +; (π ([0-9] +) \ .html); $ /viewforum.php; START=$2 [QSA, Λ, NC]

Αγνοήστε το τρίτο RewriteCond για τώρα. Ελέγχει επίσης για τις συμβολικές συνδέσεις. Δεδομένου ότι μπορείτε να δείτε αναθεωρήστε τον κανόνα είναι διαφορετικός. Υποθέστε ότι πρέπει να φιλοξενήσετε και WordPress και phpBB τους ιστοχώρους σε μια ενιαία διεύθυνση IP (ενιαίος κεντρικός υπολογιστής). Δεδομένου ότι οι πρώτοι δύο κανόνες είναι κοινοί μπορείτε να κάνετε γράφετε τον ακόλουθο κανόνα που θα ισχύσει και για τον δύο κεντρικό υπολογιστή:

# Εάν είναι ένα αρχείο, ένας κατάλογος ή μια συμβολική σύνδεση
εάν (- ε $request_filename) {
    σπάσιμο 
}

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

Τώρα μπορείτε να πρέπει χωριστός να αναθεωρήσετε τους κανόνες για το μεμονωμένο κεντρικό υπολογιστή σας. Παραδείγματος χάριν μπορείτε να χρησιμοποιήσετε αυτόν τον κανόνα για το WordPress σας blog:

# αναθεωρήστε τους κανόνες για το blog.example.com
εάν ($host ~* ^blog \ .example \ .com$) {
    ξαναγράψτε ^ (. *) $ /index.php; q=$1 τελευταίος 
    σπάσιμο 
}

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

Ο τελευταίος εξασφαλίζει ότι κανένας περαιτέρω δεν αναθεωρεί τους κανόνες εκτελείται όταν ξαναγράψτε τις αντιστοιχίες κανόνα.

Έχω γράψει τρία άρθρα πρόσφατα με έμφαση στην εικονική φιλοξενία:

  1. Πώς να τρέξει phpBB σε Nginx με/χωρίς εικονική φιλοξενία
  2. Nginx: πώς να καθορίσει το ψήφισμα καταλόγου το ζήτημα καθώς επίσης και εσωτερικός επαναπροσανατολίζει στην εικονική φιλοξενία
  3. Πώς να διαμορφώσει Nginx για την εικονική φιλοξενία

Προσθέστε λίγες περισσότερες άκρες για να συμπληρώσετε το κεφάλαιο;

Πώς να αποτρέψει τα αρχεία αρχίζοντας με. (όπως .htaccess) από την εξέταση σε Nginx;

Προσθέστε αυτό μέσα στο φραγμό κεντρικών υπολογιστών σας κοντά στην κορυφή:

θέση ~/\. {
    αρνηθείτε όλων 
}

Αυτό θα απορρίψει όλα τα εξωτερικά αιτήματα για τα αρχεία με τα ονόματα αρχίζοντας με. (σημείο).

Πώς να επαναπροσανατολίσει www url μη -μη-www στις παραλλαγές;

Παραδείγματος χάριν είναι εδώ πώς εσείς μπορεί να επαναπροσανατολίσει όλα τα αιτήματα όπως το http://www.example.com/yourpage στο http://example.com/yourpage:

εάν ($host ~* ^www \. (. *)) {
    καθορισμένο $host_without_www $1 
    ξαναγράψτε ^ (. *) $ http://$host_without_www$1 μόνιμο  # $1 περιέχουν «/yourpage», όχι «www.example.net/yourpage'
}

Σημείωση: Αυτό το παράδειγμα είναι από τον ιστοχώρο τους

Πώς να μετατρέψει Apache HTTPD αναθεωρήστε τους κανόνες σε Nginx αναθεωρεί τους κανόνες;

Έχω συζητήσει μερικές αποχρώσεις επάνω από και στα άρθρα. Η ενιαία μεγαλύτερη άκρη που μπορώ να δώσω είναι ότι σε Apache HTTPD η κανονική έκφραση σε RewriteRule αντιστοιχείται το αίτημα URI χωρίς α/στην αρχή, ενώ σε Nginx ταιριάζει με ένα uri αιτήματος με μια κάθετο στην αρχή. Τόσο παραδείγματος χάριν ένα Apache HTTPD αναθεωρεί τον κανόνα όπως αυτό:

RewriteRule ^ [a-z0-9_-] *-f ([0-9] +)/; (π ([0-9] +) \ .html); $ /viewforum.php; F=$1&START=$3 [QSA, Λ, NC]

γίνεται αυτό στο nginx:

ξαναγράψτε ^/[*-f a-z0-9_-] ([0-9] +)/; (π ([0-9] +) \ .html); $ /viewforum.php; f=$1&start=$3 διαρκέστε 

Απλός, έτσι δεν είναι;

Σημείωση: Οι ανάγκες του RewriteCond να είναι εφαρμοσμένη χρησιμοποίηση εάν οδηγίες όπως εξηγείται ανωτέρω.

Πώς να σταματήσει την εικόνα/τα στατικά αρχεία;
Πώς να διευκρινίσει μια ημερομηνία λήξης για την εικόνα/τα στατικά αρχεία;

# εξυπηρετήστε τα στατικά αρχεία άμεσα
θέση ~* ^.+. (jpg|jpeg|GIF|css|PNG|js|ico|HTML) $ {
    access_log        από 
    λήγει           30d 
}

Αισθανθείτε ελεύθερος να συζητήσει για αυτό το άρθρο στο φόρουμ μας.

CP. Σε περίπτωση που αναρωτιέστε ότι η χάραξη δεν είναι για το σπάσιμο ενός λογισμικού ή τη χρησιμοποίηση του για κακόβουλους λόγους (που ραγίζουν είναι). Η χάραξη είναι για τη γνώση ενός θέματος με οικείες λεπτομέρειες. Δυστυχώς οι δημοσιογράφοι ύλη-μέσων συγχέουν συχνά μεταξύ της χάραξης και του ραγίσματος και έχουν δώσει τη χάραξη ενός κακού ονόματος.

ΜΑΔ. Τι δεν έχω εξερευνήσει ακόμα είναι η διαφορά απόδοσης μεταξύ του nginx και Apache HTTPD. Θα ενημερώσω σε εκείνο τον πιό πρόσφατο.