Nginx fine tuning. Προστασία, βελτιστοποίηση. Διακομιστής Ιστού Nginx και apache - τι είναι και πώς λειτουργεί αυτός ο συνδυασμός;

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

Σε ένα από τα προηγούμενα άρθρα εξετάσαμε ήδη τη ρύθμιση των κύριων παραμέτρων του, σε αυτό το άρθρο θέλω να σταθώ περισσότερο στην απόδοση και την προετοιμασία του διακομιστή web για χρήση σε συνθήκες μάχης. Σχετικά με Διανομή Linux, τότε σήμερα θα εξετάσουμε το CentOS, αυτό το σύστημα χρησιμοποιείται συχνά σε διακομιστές και ενδέχεται να προκύψουν κάποιες δυσκολίες με τη ρύθμιση του Nginx. Στη συνέχεια θα εξετάσουμε τη ρύθμιση του Nginx CentOS, ας μιλήσουμε για το πώς να ενεργοποιήσετε την πλήρη υποστήριξη για το http2, google page speedκαι διαμορφώστε το κύριο αρχείο διαμόρφωσης.

Τα επίσημα αποθετήρια CentOS περιλαμβάνουν το Nginx και πιθανότατα είναι ήδη εγκατεστημένο στο σύστημά σας. Αλλά θέλουμε ο ιστότοπος να λειτουργεί χρησιμοποιώντας το πρωτόκολλο http2, το οποίο σας επιτρέπει να μεταφέρετε όλα τα δεδομένα με μία σύνδεση και αυτό αυξάνει την απόδοση. Για να εργαστείτε μέσω http2, θα χρειαστεί να διαμορφώσετε ένα πιστοποιητικό SSL, αλλά αυτό είναι ήδη γραμμένο στο άρθρο για την απόκτηση πιστοποιητικού Lets Encrypt Nginx. Αλλά δεν είναι μόνο αυτό. Για εναλλαγή από το κανονικό SSL στο HTTP2.0, τα περισσότερα προγράμματα περιήγησης χρησιμοποιούν πλέον το πρωτόκολλο ALPN και υποστηρίζεται από το OpenSSL 1.02. Ενώ στα αποθετήρια υπάρχει μόνο το OpenSSL 1.01. Επομένως, πρέπει να εγκαταστήσουμε μια έκδοση του Nginx που έχει κατασκευαστεί με OpenSSL 1.02. Μπορείτε να χρησιμοποιήσετε το Broken Repo για αυτό:

sudo yum -y εγκατάσταση yum-utils
# sudo yum-config-manager --add-repo https://brouken.com/brouken.repo

Εάν χρησιμοποιείτε το αποθετήριο EPEL, τότε πρέπει να υποδείξετε ότι δεν χρειάζεται να πάρετε το Nginx από αυτό:

sudo yum-config-manager --save --setopt=epel.exclude=nginx*;

Τώρα για να εγκαταστήσετε τη σωστή έκδοση του Nginx, απλώς πληκτρολογήστε:

sudo yum εγκατάσταση nginx

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

2. Ρύθμιση του Nginx

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

παγκόσμιες επιλογές
εκδηλώσεις ()
http(
διακομιστής (
τοποθεσία()
}
υπηρέτης()
}

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

Βασικός γενικές ρυθμίσειςθα το κάνουμε στο αρχείο /etc/nginx/nginx.conf. Στη συνέχεια, ας δούμε τι ακριβώς θα αλλάξουμε και ποιες τιμές είναι σκόπιμο να ορίσουμε. Ας ξεκινήσουμε με τις καθολικές επιλογές:

  • χρήστης- ο χρήστης για λογαριασμό του οποίου θα εκκινηθεί ο διακομιστής πρέπει να είναι ο κάτοχος του καταλόγου με τα αρχεία του ιστότοπου και το php-fpm πρέπει να εκτελείται για λογαριασμό του.
  • worker_processes- ο αριθμός των διεργασιών Nginx που θα εκκινηθούν πρέπει να οριστεί ακριβώς όσες έχετε πυρήνες, για παράδειγμα, εγώ έχω 4.
  • worker_cpu_affinity- αυτή η παράμετρος σάς επιτρέπει να αντιστοιχίσετε κάθε διεργασία σε έναν ξεχωριστό πυρήνα επεξεργαστή, ώστε το ίδιο το πρόγραμμα να επιλέξει σε τι θα επισυναφθεί.
  • worker_rlimit_nofile - μέγιστο ποσόαρχεία που μπορεί να ανοίξει το πρόγραμμα, κάθε σύνδεση χρειάζεται τουλάχιστον δύο αρχεία και κάθε διαδικασία θα έχει τον αριθμό των συνδέσεων που καθορίζετε, οπότε ο τύπος είναι: worker_processes * Worker_connections * 2, παράμετρος εργαζόμενος_συνδέσειςΑς το δούμε παρακάτω.
  • pcre_jit- ενεργοποιήστε αυτήν την επιλογή για να επιταχύνετε την επεξεργασία κανονικές εκφράσειςΧρησιμοποιώντας τη συλλογή JIT.

Στην ενότητα συμβάντων θα πρέπει να διαμορφώσετε δύο παραμέτρους:

  • εργαζόμενος_συνδέσεις- ο αριθμός των συνδέσεων για μία διεργασία πρέπει να είναι επαρκής για την επεξεργασία των εισερχόμενων συνδέσεων. Αρχικά, πρέπει να γνωρίζουμε πόσες από αυτές τις εισερχόμενες συνδέσεις υπάρχουν, για αυτό εξετάζουμε τα στατιστικά στοιχεία στον διακομιστή ip_address/nginx_status. Θα δούμε πώς να το ενεργοποιήσετε παρακάτω. Στη γραμμή Active Connections βλέπουμε τον αριθμό δραστικές ενώσειςμε τον διακομιστή, πρέπει επίσης να λάβετε υπόψη ότι λαμβάνονται υπόψη και οι συνδέσεις με php-fpm. Στη συνέχεια, δώστε προσοχή στα αποδεκτά και τα πεδία χειρισμού, το πρώτο εμφανίζει τις επεξεργασμένες συνδέσεις, το δεύτερο - τον αριθμό των αποδεκτών. Οι τιμές πρέπει να είναι ίδιες. Εάν διαφέρουν, σημαίνει ότι δεν υπάρχουν αρκετές συνδέσεις. Δείτε τα παραδείγματα, η πρώτη εικόνα είναι το πρόβλημα, η δεύτερη είναι η σειρά. Για τη διαμόρφωσή μου, ο βέλτιστος αριθμός μπορεί να είναι 200 ​​συνδέσεις (800 συνολικά, λαμβάνοντας υπόψη 4 διεργασίες):

  • multi_accept- επιτρέπει στο πρόγραμμα να δέχεται πολλές συνδέσεις ταυτόχρονα, επιταχύνει επίσης την εργασία, όταν μεγάλες ποσότητεςσυνδέσεις?
  • accept_mutex- ορίστε την τιμή αυτής της παραμέτρου σε off, έτσι ώστε όλες οι διεργασίες να λαμβάνουν αμέσως ειδοποίηση για νέες συνδέσεις.

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

  • αποστολή αρχείου- χρησιμοποιήστε τη μέθοδο αποστολής δεδομένων sendfile. Η πιο αποτελεσματική μέθοδος για Linux.
  • tcp_nodelay, tcp_nopush- στέλνει τις κεφαλίδες και το σώμα της αίτησης σε ένα πακέτο, λειτουργεί λίγο πιο γρήγορα.
  • keepalive_timeout- timeout για τη διατήρηση μιας σύνδεσης με τον πελάτη, εάν δεν έχετε πολύ αργά σενάρια, τότε θα είναι αρκετά 10 δευτερόλεπτα, ορίστε την τιμή όσο χρειάζεται, ώστε ο χρήστης να μπορεί να συνδεθεί στον διακομιστή.
  • reset_timedout_connection- διακοπή συνδέσεων μετά από ένα τάιμ άουτ.
  • open_file_cache- πληροφορίες κρυφής μνήμης για ανοιχτά αρχεία. Για παράδειγμα, open_file_cache max=200000 inactive=120s; max - μέγιστος αριθμός αρχείων στην κρυφή μνήμη, χρόνος προσωρινής αποθήκευσης.
  • open_file_cache_valid- όταν πρέπει να ελέγξετε τη συνάφεια των αρχείων. Για παράδειγμα: open_file_cache_valid 120s;
  • open_file_cache_min_uses- προσωρινή αποθήκευση μόνο αρχείων που έχουν ανοιχτεί καθορισμένη ποσότηταμια φορά;
  • open_file_cache_errors- θυμηθείτε τα σφάλματα ανοίγματος αρχείων.
  • if_modified_of- καθορίζει τον τρόπο επεξεργασίας των κεφαλίδων if-modified-αφού. Με αυτήν την κεφαλίδα, το πρόγραμμα περιήγησης μπορεί να λάβει μια απάντηση 304 εάν η σελίδα δεν έχει αλλάξει από τότε τελευταία προβολή. Πιθανές επιλογές: μην αποστέλλεται - αποστέλλεται, αποστολή εάν η ώρα ταιριάζει ακριβώς - ακριβής, αποστολή εάν η ώρα ταιριάζει ακριβώς ή περισσότερο - πριν.

Έτσι θα μοιάζει εγκατάσταση nginx conf:

χρήστης nginx?
worker_processes 4;
worker_cpu_affinity auto;
worker_rlimit_nofile 10000;
pcre_jit on?

error_log /var/log/nginx/error.log warn;
load_module "modules/ngx_pagespeed.so";

εκδηλώσεις (
multi_accept on;
accept_mutex off;
Worker_connections 1024;
}

sendfile on?
tcp_nopush on;
tcp_nodelay ενεργοποιημένο;

open_file_cache max=200000 inactive=20s;
open_file_cache_valid 120s;
open_file_cache_errors on;

reset_timedout_connection ενεργοποιημένο?
client_body_timeout 10;
keepalive_timeout 65;

περιλαμβάνουν /etc/nginx/sites-enabled.*.conf

3. Ρύθμιση του http2

Δεν θα περιγράψω λεπτομερώς τη ρύθμιση της ενότητας διακομιστή, επειδή το έκανα ήδη στο άρθρο εγκατάστασης του Nginx στο Ubuntu και δεν έχω τίποτα να προσθέσω εδώ, Ρύθμιση SSLΑυτό είναι ένα αρκετά ευρύ θέμα και θα συζητηθεί επίσης σε ξεχωριστό άρθρο. Αλλά για να ρυθμίσετε το http2 πρέπει να έχετε ήδη SSL. Στη συνέχεια, απλώς προσαρμόστε την οδηγία ακρόασης στην ενότητα του διακομιστή σας:

ακούστε 194.67.215.125:443 default_server;

ακούστε 194.67.215.125:443 http2 default_server;

Σαν αυτό με απλό τρόπομπορείτε να ενεργοποιήσετε το http2 εάν το έχετε εγκαταστήσει στο παρελθόν σωστή έκδοση Nginx.

4. Ρύθμιση PageSpeed

Το Google Pagespeed είναι μια λειτουργική μονάδα Nginx που εκτελεί διάφορες βελτιστοποιήσεις για να διασφαλίσει ότι οι σελίδες φορτώνουν πιο γρήγορα, ο διακομιστής ιστού λειτουργεί πιο αποτελεσματικά και οι χρήστες αισθάνονται λιγότερη ενόχληση. Αυτό περιλαμβάνει προσωρινή αποθήκευση, βελτιστοποίηση κώδικας html, βελτιστοποίηση εικόνας, συνδυασμός javascript και κώδικας cssκαι πολλα ΑΚΟΜΑ. Όλα αυτά γίνονται σε επίπεδο Nginx, επομένως είναι πιο αποτελεσματικό από ό,τι αν το κάνατε στην PHP. Αλλά υπάρχει ένα μειονέκτημα: η ενότητα αφαιρεί την κεφαλίδα Τελευταία τροποποίηση.

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

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

yum εγκατάσταση wget gcc cmake unzip gcc-c++ pcre-devel zlib-devel

Λήψη και εξαγωγή πηγών Nginx για την έκδοσή σας, για παράδειγμα 1.13.3:

wget -c https://nginx.org/download/nginx-1.13.3.tar.gz
# tar -xzvf nginx-1.13.3.tar.gz

Ρυθμίσεις διακομιστής nginxδεν περιλαμβάνει επανασυναρμολόγηση και αντικατάσταση του προγράμματος από το αποθετήριο, απλώς χρησιμοποιούμε αυτές τις πηγές για τη δημιουργία της ενότητας. Λήψη και εξαγωγή πηγών PageSpeed:

wget -c https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.2-stable.zip
# unzip v1.12.34.2-stable.zip

Κατεβάστε και αποσυσκευάστε τη βιβλιοθήκη βελτιστοποίησης PageSpeed ​​στο φάκελο με τις πηγές της λειτουργικής μονάδας:

cd ngx_pagespeed-1.12.34.2-stable/
# wget -c https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz
# tar -xvzf 1.12.34.2-x64.tar.gz

Λήψη και αποσυσκευασία πηγών OpenSSL 1.02:

wget -c https://www.openssl.org/source/openssl-1.0.2k.tar.gz -O /opt/lib/$OPENSSL.tar.gz
# tar xvpzf openssl-1.0.2k.tar.gz

Τώρα πρέπει να συναρμολογήσουμε τη μονάδα. Πρώτα, κοιτάξτε τις επιλογές με τις οποίες έχει κατασκευαστεί το τρέχον Nginx:

Τώρα ας πάμε στο φάκελο με το Nginx, ας αντικαταστήσουμε όλες τις ληφθείσες επιλογές, την επιλογή --add-dynamic-module για PageSpeed, OpenSSL και προσπαθήστε να δημιουργήσετε:

cd nginx-1.13.3
# ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx .conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx .pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache /nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path= /var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --με-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-secure_link_module --with th-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-t O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic" --with- ld-opt= --with-openssl=$HOME/openssl-1.0.2k --add-dynamic-module=$HOME/ngx_pagespeed-1.12.34.2-stable $(PS_NGX_EXTRA_FLAGS)
# φτιαχνω, κανω

Εάν όλα έγιναν σωστά, τότε στην έξοδο θα λάβετε τη μονάδα ngx_pagespeed.so στο φάκελο obj, πρέπει να την αντιγράψετε στο φάκελο /etc/nginx/modules:

cp ngx_pagespeed.so /etc/nginx/modules/ngx_pagespeed.so

Δημιουργήστε έναν φάκελο για την προσωρινή μνήμη:

mkdir -p /var/ngx_pagespeed_cache
# chown -R nginx:nginx /var/ngx_pagespeed_cache

Τώρα προσθέστε την ακόλουθη γραμμή για να ενεργοποιήσετε τη λειτουργική μονάδα στο /etc/nginx/nginx.conf:

load_module "modules/ngx_pagespeed.so";

Γεια σου, αγαπητέ χρήστη του Habrahabr. Η ομιλία μου θα είναι για το πώς να προετοιμάσω το έδαφος για τοπικά έργα ανάπτυξης ιστοσελίδων στο χειρουργείο Σύστημα Ubuntu 16.04.1 LTS.

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

Τεχνολογίες που θα χρησιμοποιηθούν στο άρθρο: nginx, php-fpm.

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

Πηγαίνω!

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

Εγκαθιστώ:

Ικανότητα εγκατάστασης Sudo apt
Ενημερώνουμε το ευρετήριο.

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

Πλήρης αναβάθμιση ικανότητας Sudo

Εγκατάσταση και διαμόρφωση nginx(έκδοση >= 1.10.0)

Εγκαθιστούμε.

Sudo aptitude εγκατάσταση nginx
Ας ξεκινήσουμε.

Έναρξη υπηρεσίας Sudo nginx
Ελέγχουμε την έκδοση για να βεβαιωθούμε ότι δεν έχουμε εγκαταστήσει παλιά, δηλαδή χαμηλότερη από 1.10.0.

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

Cd /etc/nginx/
Μπορείτε να δείτε τα περιεχόμενα ενός καταλόγου με την εντολή ls με τις σημαίες -la, θα είναι πιο βολικό να προβάλετε τα περιεχόμενα του καταλόγου (στην πραγματικότητα, αυτή η εντολή με συγκεκριμένες σημαίες μπορεί να περιγραφεί με περισσότερες λεπτομέρειες και με μεγαλύτερη ακρίβεια, αλλά. έχουμε διαφορετικό θέμα σήμερα).

Ls-la
Ενδιαφερόμαστε για αυτή τη στιγμήτους δύο καταλόγους που βλέπετε στο στιγμιότυπο οθόνης. Αυτοί είναι οι κατάλογοι που είναι διαθέσιμοι και ενεργοποιημένοι σε ιστότοπους.

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

Cd /etc/nginx/sites-available
Πριν ξεκινήσουμε τη δημιουργία του αρχείου διαμόρφωσης, ας ελέγξουμε τι έχουμε σε αυτόν τον κατάλογο. Στην περίπτωσή μου, ο κατάλογος δεν είναι κενός, περιέχει ήδη αρχεία ρυθμίσεων, τα διέγραψα για να μην σας παραπλανήσω.

Σημαντική παρέκκλιση

Στην περίπτωση εγκατάστασης του nginx «από την αρχή», ακριβώς «από την αρχή», αφού όταν απεγκαταστήσετε το nginx με την εντολή
sudo apt-get remove nginx ή sudo apt remove nginx τα αρχεία ρυθμίσεων παραμένουν και αν ξαφνικά δεν καταλαβαίνετε γιατί το nginx δεν λειτουργεί και θέλετε να το εγκαταστήσετε ξανά (συνήθως οι αρχάριοι καταφεύγουν σε αυτό Χρήστες Linux), τότε ακόμη και μετά την επανεγκατάσταση δεν θα λειτουργήσει σωστά, επειδή τα παλιά αρχεία ρυθμίσεων (δεν διαγράφονται μετά την αφαίρεση με την εντολή αφαίρεσης) περιέχουν εσφαλμένες ρυθμίσεις, θα πρέπει να διαγραφούν ή να ρυθμιστούν σωστά, μόνο τότε θα λειτουργήσει το nginx.

Συνιστώ τη διαγραφή με την εντολή sudo apt-get purge nginx ή sudo apt purge nginx. Εάν χρησιμοποιείτε διαχειριστής πακέτωνικανότητα, λοιπόν εντολή sudoΤο aptitude purge nginx καταργεί ολόκληρο το πακέτο με όλες τις εξαρτήσεις και τα αρχεία ρυθμίσεων.


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

Ls-la

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

Sudo touch project.local
Ας δούμε τι έγινε.

Τώρα ας το ανοίξουμε στο πρόγραμμα επεξεργασίας, θα το ανοίξω στο nano.

Sudo nano project.τοπικό
Βλέπουμε ότι είναι άδειο. Τώρα ας προχωρήσουμε στη δημιουργία του αρχείου μας. Πρέπει να φέρετε τη διαμόρφωση στη φόρμα όπως γράφεται παρακάτω. Θα περιγράψω μόνο τις ζωτικής σημασίας οδηγίες αυτού του αρχείου, δεν θα περιγράψω τις υπόλοιπες, αφού αυτό δεν είναι σημαντικό αυτή τη στιγμή, τελικά, έχουμε θέμα βασικές ρυθμίσεις. Αυτές οι ρυθμίσεις "slide" είναι αρκετές για την ανάπτυξη έργων τοπικά, όχι μόνο μικρά, αλλά και αρκετά μεγάλα. Στα επόμενα άρθρα θα περιγράψω ξεχωριστά καθεμία από τις οδηγίες που χρησιμοποιούνται (έτσι ονομάζονται οι γραμμές, για παράδειγμα όνομα_διακομιστή) αυτού του αρχείου.

Δείτε τα σχόλια απευθείας στο αρχείο διαμόρφωσης.

Διακομιστής (ακρόαση 80; # θύρα που ακούει στο nginx server_name project.local; # Ονομα τομέαπου σχετίζονται με το ρεύμα εικονικός οικοδεσπότης root /home/stavanger/code/project.local; # τον κατάλογο στον οποίο βρίσκεται το έργο, τη διαδρομή προς το σημείο εισόδου index.php; # add_header Access-Control-Allow-Origin *; # εξυπηρετήστε στατικά αρχεία απευθείας τοποθεσία ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ ( access_log off; λήγει μέγ. log_not_found off; ) τοποθεσία / ( # add_header Access-Control-Allow- Προέλευση *; try_files $uri $uri/ /index.php?$query_string ) τοποθεσία ~* \.php$ ( try_files $uri = 404; fastcgi_split_path_info ^(.+\.php)(/.+)$; :/var/run/php7.0-fpm.sock.
Αποθηκεύστε το αρχείο. Τώρα πρέπει να ελέγξουμε αν υπάρχουν σφάλματα σε αυτό. Μπορούμε να το κάνουμε αυτό ως ομάδα.

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

Τώρα πρέπει να ενεργοποιήσουμε το αρχείο ρυθμίσεων, στον κατάλογο /etc/nginx/sites-enabled/ πρέπει να δημιουργήσουμε έναν συμβολικό σύνδεσμο ( συμβολικός σύνδεσμος). Εάν εγκαταστήσατε το nginx από την αρχή, τότε σε αυτόν τον κατάλογο υπάρχει ένας σύνδεσμος συμβόλων προς το προεπιλεγμένο αρχείο, το οποίο συζητήθηκε παραπάνω, μπορείτε να το διαγράψετε εάν δεν το χρειάζεστε. Μεταβείτε στον επιθυμητό κατάλογο.

Cd /etc/nginx/sites-enabled/
Τώρα είμαστε στον σωστό κατάλογο. Ας δημιουργήσουμε τον συμβολικό μας σύνδεσμο. Για να δημιουργήσετε, χρησιμοποιήστε την εντολή ln με τη σημαία -s και, στη συνέχεια, θα υποδείξουμε τη διαδρομή προς το project.local config μας.

Sudo ln -s /etc/nginx/sites-available/project.local
Ας δούμε τον συμβολικό σύνδεσμο που δημιουργήσαμε.

Για να βεβαιωθούμε ότι εξακολουθούμε να κάνουμε τα πάντα σωστά, ας εκτελέσουμε ξανά την εντολή.

Αρχείο Οικοδεσπότες

Αυτό το αρχείο βρίσκεται στο /etc/hosts. Η παρουσία καταχωρήσεων σε αυτό σας επιτρέπει να εκτελέσετε το nginx χρησιμοποιώντας τον localhost ως τομέα. Σε αυτό το αρχείο μπορείτε να εκχωρήσετε εναλλακτικά ψευδώνυμα, για παράδειγμα για το έργο project.local, θα εκχωρήσουμε τον τομέα project.local.

Ανοίξτε το αρχείο στο nano editor.

Sudo nano /etc/hosts
Θα έχετε άλλες πληροφορίες σε αυτό το αρχείο, απλώς αγνοήστε τις. Απλά πρέπει να προσθέσετε μια γραμμή όπως στο στιγμιότυπο οθόνης μου.

Εγκατάσταση php-fpm (>=7.0)

sudo aptitude εγκατάσταση php-fpm
Ελεγχος εγκατεστημένη έκδοση, για παν ενδεχόμενο, αν και στο Ubuntu 16.04.1 η έκδοση 7.0 είναι στα αποθετήρια.

Php-fpm7.0 -v

Ας βεβαιωθούμε ότι όλα είναι εντάξει. Ας ξεκινήσουμε τα php-fpm.

Έναρξη υπηρεσίας Sudo php7.0-fpm
Εάν επεξεργαστείτε τις ρυθμίσεις παραμέτρων, μην ξεχάσετε να επανεκκινήσετε τον δαίμονα. Το κάνει. Αλλά δεν θα το χρειαστούμε.

Επανεκκίνηση της υπηρεσίας Sudo php7.0-fpm
Αυτό ολοκληρώνει την εγκατάσταση και τη διαμόρφωση των php-fpm. Πραγματικά, αυτό είναι όλο. Αυτό δεν είναι μαγικό, η διαδρομή προς την υποδοχή php-fpm είχε ήδη καθοριστεί στο αρχείο διαμόρφωσης. Φυσικά μπορεί να χρειαστείτε μερικά php επεκτάσειςγια ανάπτυξη προσωπικά έργα, αλλά μπορείτε να τα προμηθευτείτε όπως απαιτούνται.

Τώρα ας πάμε στον κατάλογο με το έργο μας, το έχω σε αυτό το μονοπάτι.

Cd /home/stavanger/code/project.local
Ας πάμε στον παραπάνω κατάλογο και ας κάνουμε τα δικαιώματα 777 (δηλαδή, θα κάνουμε πλήρη δικαιώματακατάλογο με το έργο του έργου μας.local). Αυτό θα μας σώσει από περιττά προβλήματα στο μέλλον.

Cd .. sudo chmod -R 777 project.τοπικό
Αυτό ολοκληρώνει τη ρύθμιση του λογισμικού, ας δημιουργήσουμε ένα δοκιμαστικό αρχείο στον κατάλογο εργασίας project.local και βεβαιωθούμε ότι όλα λειτουργούν. Θα δημιουργήσω ένα αρχείο index.php με αυτό το περιεχόμενο.

Πηγαίνουμε στο πρόγραμμα περιήγησης και βλέπουμε ότι όλα λειτουργούν υπέροχα για εμάς! Διερμηνέας PHP συμπεριλαμβανομένου.

Με σεβασμό στους αναγνώστες, Stavanger.

14 Αυγούστου 2009 στις 7:29 μ.μ

Ρύθμιση του nginx

  • Nginx

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

Ένα καλό σημείο εκκίνησης για τη ρύθμιση του nginx είναι το config που συνοδεύει τη διανομή, αλλά πολλές από τις δυνατότητες αυτού του διακομιστή δεν αναφέρονται καν σε αυτό. Ένα πολύ πιο λεπτομερές παράδειγμα βρίσκεται στον ιστότοπο του Igor Sysoev: sysoev.ru/nginx/docs/example.html. Ωστόσο, ας προσπαθήσουμε καλύτερα να φτιάξουμε το config μας από την αρχή, με μπριτζ και ποιήτριες. :)

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

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

Worker_processes 2;

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

Ειδοποίηση Error_log /spool/logs/nginx/nginx.error_log; # Το επίπεδο ειδοποίησης "ειδοποίησης" μπορεί φυσικά να αλλάξει

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

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

Ενότητες για εργασία με εκδηλώσεις:
- η επιλογή και η δημοσκόπηση είναι συνήθως πιο αργή και φορτώνουν αρκετά τον επεξεργαστή, αλλά είναι διαθέσιμα σχεδόν παντού και λειτουργούν σχεδόν πάντα.
- kqueue και epoll - πιο αποτελεσματικά, αλλά διαθέσιμα μόνο σε FreeBSD και Linux 2.6, αντίστοιχα.
- Το rtsig είναι μια αρκετά αποτελεσματική μέθοδος και υποστηρίζεται ακόμη και από πολύ παλιά Linux, αλλά μπορεί να προκαλέσει προβλήματα με μεγάλο αριθμό συνδέσεων.
- /dev/poll - από όσο ξέρω, λειτουργεί σε κάπως πιο εξωτικά συστήματα, όπως το Solaris, και είναι αρκετά αποτελεσματικό εκεί.

Παράμετρος worker_connections:
- Ο συνολικός μέγιστος αριθμός των εξυπηρετούμενων πελατών θα είναι ίσος με worker_processes *worker_connections.
- Μερικές φορές ακόμη και οι πιο ακραίες τιμές μπορούν να λειτουργήσουν θετικά, όπως 128 διεργασίες, 128 συνδέσεις ανά διεργασία ή 1 διεργασία, αλλά με την παράμετρο worker_connections=16384. Στην τελευταία περίπτωση, ωστόσο, πιθανότατα θα χρειαστεί να συντονίσετε το λειτουργικό σύστημα.

Εκδηλώσεις (
Worker_connections 2048;
χρήση kqueue? # Έχουμε BSD :)
}

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

Http(
# Όλος ο κωδικός παρακάτω θα βρίσκεται μέσα σε αυτήν την ενότητα %)
# ...
}

Μέσα σε αυτό το τμήμα μπορεί να υπάρχουν κάποιες αρκετά ενδιαφέρουσες παράμετροι.

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

Η παράμετρος keepalive_timeout είναι υπεύθυνη για τον μέγιστο χρόνο διατήρησης μιας σύνδεσης keepalive, εάν ο χρήστης δεν ζητήσει κάτι σε αυτήν. Σκεφτείτε πώς ο ιστότοπός σας στέλνει αιτήματα και προσαρμόστε αυτήν τη ρύθμιση. Για ιστότοπους που χρησιμοποιούν ενεργά AJAX, είναι καλύτερο να διατηρηθεί η σύνδεση περισσότερο για στατικές σελίδες που οι χρήστες θα διαβάζουν για μεγάλο χρονικό διάστημα, είναι καλύτερο να διακόψετε τη σύνδεση νωρίτερα. Λάβετε υπόψη ότι διατηρώντας μια ανενεργή σύνδεση διατήρησης, καταλαμβάνετε μια σύνδεση που θα μπορούσε να χρησιμοποιηθεί διαφορετικά. :)

Keepalive_timeout 15;

Ξεχωριστά, αξίζει να επισημάνετε τις ρυθμίσεις διακομιστή μεσολάβησης nginx. Τις περισσότερες φορές, το nginx χρησιμοποιείται ακριβώς ως διακομιστής μεσολάβησης, επομένως είναι αρκετά σημαντικά. Ειδικότερα, είναι λογικό να ορίσετε το μέγεθος της προσωρινής μνήμης για αιτήματα μεσολάβησης όχι μικρότερο από το αναμενόμενο μέγεθος απόκρισης από τον διακομιστή υποστήριξης. Με αργά (ή, αντίθετα, πολύ γρήγορα) backends, είναι λογικό να αλλάζετε τα χρονικά όρια για την αναμονή απάντησης από το backend. Θυμηθείτε, όσο μεγαλύτερα είναι αυτά τα χρονικά όρια, τόσο περισσότερο θα περιμένουν οι χρήστες σας για απάντηση εάν το backend είναι αργό.

Proxy_buffers 8 64k;
proxy_intercept_errors on?
proxy_connect_timeout 1s;
proxy_read_timeout 3s;
proxy_send_timeout 3s;

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

# προεπιλεγμένος εικονικός κεντρικός υπολογιστής
διακομιστής (
ακούστε 80 προεπιλογή?
server_name localhost;
αρνούνται όλα?
}

Αυτό μπορεί να ακολουθείται από μία (ή περισσότερες) ενότητες «διακομιστή». Κάθε ένα από αυτά περιγράφει έναν εικονικό κεντρικό υπολογιστή (τις περισσότερες φορές, με βάση το όνομα). Για τους ιδιοκτήτες πολλών τοποθεσιών σε μία φιλοξενία ή για τους οικοδεσπότες, μπορεί να υπάρχει κάτι σαν οδηγία

Συμπεριλάβετε /spool/users/nginx/*.conf;

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

Διακομιστής (
ακούστε 80?

# Λάβετε υπόψη ότι η οδηγία ονόματος διακομιστή μπορεί να καθορίσει πολλά ονόματα ταυτόχρονα.
όνομα_διακομιστή myserver.ru myserver.com;
access_log /spool/logs/nginx/myserver.access_log χρονομετρημένο;
error_log /spool/logs/nginx/myserver.error_log warn;
# ...

Ας ορίσουμε την προεπιλεγμένη κωδικοποίηση για την έξοδο.

Charset utf-8;

Και ας πούμε ότι δεν θέλουμε να δεχόμαστε αιτήματα από πελάτες που έχουν μήκος μεγαλύτερο από 1 megabyte.

Client_max_body_size 1m;

Ας ενεργοποιήσουμε το SSI για τον διακομιστή και ας ζητήσουμε να δεσμευτεί όχι περισσότερο από 1 kilobyte για μεταβλητές SSI.

Si on?
ssi_value_length 1024;

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

Το Nginx είναι ένας διακομιστής ιστού και διακομιστής μεσολάβησης email που είναι δημόσια διαθέσιμος από το 2004. Η ανάπτυξη του έργου ξεκίνησε το 2002 στα ρωσικά το όνομα ακούγεται σαν engine-ex. Όντας η δημιουργία του διάσημου προγραμματιστή Igor Sysoev, το Nginx προοριζόταν αρχικά για την εταιρεία Rambler. Έχει σχεδιαστεί για λειτουργικά συστήματα που ανήκουν στην ομάδα τύπου Unix. Το συγκρότημα έχει δοκιμαστεί με επιτυχία σε OpenBSD, FreeBSD, Linux, Mac OS X, Solaris. Στην πλατφόρμα Microsoft Windows, το Nginx άρχισε να λειτουργεί με την εμφάνιση της έκδοσης 0.7.52 της δυαδικής συναρμολόγησης.

Τα στατιστικά στοιχεία για τον Μάρτιο του 2011 δείχνουν ότι ο αριθμός των τοποθεσιών που εξυπηρετούνται από την Nginx έχει ήδη ξεπεράσει τα 22 εκατομμύρια. Σήμερα το Nginx χρησιμοποιείται από γνωστά έργα όπως τα Rambler, Begun, Yandex, SourceForge.net, WordPress.com, vkontakte.ru και άλλα. Μαζί με το lighttpd, το Nginx χρησιμοποιείται για την εξυπηρέτηση στατικού περιεχομένου που δημιουργείται από μια «άβολη» διαδικτυακή εφαρμογή που λειτουργεί «υπό την εξουσία» άλλου διακομιστή ιστού.
Αλλά προτού εμβαθύνουμε στη ζούγκλα των λειτουργικών χαρακτηριστικών του Nginx, θα ήταν χρήσιμο να θυμηθούμε τι είναι ένας web server γενικά και ένας διακομιστής μεσολάβησης ειδικότερα.

Διακομιστής Ιστού και διακομιστής μεσολάβησης

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

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

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

Ο απλούστερος διακομιστής μεσολάβησης είναι το Network Address Translator ή το NAT. Το 2000, ο διακομιστής μεσολάβησης NAT ενσωματώθηκε στη διανομή των Windows. Οι διακομιστές μεσολάβησης, όπως κάθε φαινόμενο, έχουν δύο όψεις του νομίσματος, δηλαδή μπορούν να χρησιμοποιηθούν και για καλό και για κακό. Για παράδειγμα, με τη βοήθειά τους, όσοι φοβούνται κυρώσεις για τις απρεπείς ενέργειές τους στο Διαδίκτυο κρύβουν τις διευθύνσεις IP τους...

Λειτουργικό εύρος Nginx:

  • συντήρηση αρχείων ευρετηρίου διακομιστή, στατικά ερωτήματα, δημιουργία περιγραφέων κρυφής μνήμης ανοιχτών αρχείων, λίστα αρχείων.
  • επιταχυνόμενος διακομιστής μεσολάβησης, στοιχειώδης κατανομή φορτίου, ανοχή σφαλμάτων.
  • Υποστήριξη προσωρινής αποθήκευσης κατά τη διάρκεια ταχείας διακομιστή μεσολάβησης και FastCGI.
  • υποστήριξη για FastCGI (επιταχυνόμενους) και διακομιστές memcached.
  • αρθρωτότητα, φίλτρα, συμπεριλαμβανομένης της συνέχισης (εύρος byte) και της συμπίεσης (gzip).
  • Έλεγχος ταυτότητας HTTP, τμηματικές αποκρίσεις, φίλτρο SSI.
  • παράλληλη εκτέλεση πολλών υποερωτημάτων σε μια σελίδα που υποβάλλεται σε επεξεργασία μέσω του FastCGI ή ενός διακομιστή μεσολάβησης στο φίλτρο SSI.
  • Υποστήριξη StartTLS και SSL.
  • δυνατότητα υποστήριξης της ενσωματωμένης Perl.
  • απλός έλεγχος ταυτότητας (USER/PASS, LOGIN).
  • ανακατεύθυνση διακομιστή (διακομιστής μεσολάβησης IMAP/POP3) του χρήστη στο backend IMAP/POP3 χρησιμοποιώντας έναν εξωτερικό διακομιστή ελέγχου ταυτότητας (HTTP).

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

Αρχιτεκτονική και Διαμόρφωση

Οι διεργασίες Worker στο Nginx εξυπηρετούν ταυτόχρονα πολλαπλές συνδέσεις, παρέχοντάς τους κλήσεις OS (λειτουργικό σύστημα) epoll (Linux), select και kqueue (FreeBSD). Τα δεδομένα που λαμβάνονται από τον πελάτη αναλύονται χρησιμοποιώντας μια μηχανή κατάστασης. Το αναλυμένο αίτημα υποβάλλεται σε επεξεργασία από μια αλυσίδα μονάδων που καθορίζονται από τη διαμόρφωση. Η απάντηση στον πελάτη δημιουργείται σε buffer, τα οποία μπορούν να παραπέμπουν σε ένα τμήμα ενός αρχείου ή να αποθηκεύουν δεδομένα στη μνήμη. Η ακολουθία μεταφοράς δεδομένων στον πελάτη καθορίζεται από τις αλυσίδες στις οποίες ομαδοποιούνται τα buffer.

Δομικά, ο διακομιστής Nginx HTTP χωρίζεται σε εικονικούς διακομιστές, οι οποίοι με τη σειρά τους χωρίζονται σε τοποθεσίες. Ένας εικονικός διακομιστής ή μια οδηγία μπορεί να καθοριστεί με θύρες και διευθύνσεις για τη λήψη συνδέσεων. Για τη θέση, μπορείτε να καθορίσετε ένα ακριβές URI, μέρος ενός URI ή μια κανονική έκφραση Για τη διαχείριση της ηλεκτρονικής μνήμης, χρησιμοποιούνται ομάδες, οι οποίες είναι μια ακολουθία προεπιλεγμένων μπλοκ μνήμης. Ένα μπλοκ, που αρχικά διατέθηκε για την πισίνα, έχει μήκος από 1 έως 16 kilobyte. Χωρίζεται σε περιοχές - κατεχόμενες και μη. Καθώς το τελευταίο γεμίζει, η εκχώρηση ενός νέου αντικειμένου εξασφαλίζεται με το σχηματισμό ενός νέου μπλοκ.

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

Οφέλη του Nginx

Ο Nginx θεωρείται ένας πολύ γρήγορος διακομιστής HTTP. Αντί για Apache ή μαζί με αυτό, το Nginx χρησιμοποιείται για την επιτάχυνση της επεξεργασίας αιτημάτων και τη μείωση του φόρτου στον διακομιστή. Το γεγονός είναι ότι οι περισσότεροι χρήστες δεν χρειάζονται τις τεράστιες δυνατότητες που είναι εγγενείς στην αρθρωτή αρχιτεκτονική του Apache. Πρέπει να πληρώσετε για αυτήν την αζήτητη λειτουργικότητα με σημαντική κατανάλωση πόρων συστήματος. Οι συνηθισμένοι ιστότοποι, κατά κανόνα, χαρακτηρίζονται από μια σαφή «κυριαρχία» στατικών αρχείων (εικόνες, αρχεία στυλ, JavaScript) και όχι σε σενάρια. Δεν απαιτείται ειδική λειτουργικότητα για τη μεταφορά αυτών των αρχείων σε έναν επισκέπτη πόρων, καθώς η εργασία είναι πολύ απλή. Αυτό σημαίνει ότι ο διακομιστής web για την επεξεργασία τέτοιων αιτημάτων πρέπει να είναι απλός και ελαφρύς, όπως το Nginx.

Τρόποι χρήσης του Nginx

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

Επιταχυνόμενος διακομιστής μεσολάβησης. Με αυτήν την επιλογή, όλα τα αιτήματα επισκεπτών πηγαίνουν πρώτα στο Nginx. Το Nginx επεξεργάζεται αιτήματα για στατικά αρχεία (για παράδειγμα, μια εικόνα, ένα απλό αρχείο HTML, JavaScript ή CSS) ανεξάρτητα. Εάν ένας χρήστης αποκτήσει πρόσβαση σε ένα συγκεκριμένο σενάριο, θα ανακατευθύνει το αίτημα στο τμήμα Apache. Δεν χρειάζεται να κάνετε μετασχηματισμούς με τον κώδικα του ιστότοπου.

Εάν το κανάλι από τον διακομιστή στον επισκέπτη και αντίστροφα είναι αργό, αυτή η χρήση του Nginx μπορεί να δώσει ένα επιπλέον αποτέλεσμα. Το Nginx μεταβιβάζει το αίτημα που έλαβε από τον επισκέπτη στον Apache για επεξεργασία. Μετά την επεξεργασία του αιτήματος, ο Apache προωθεί τη σελίδα στο Nginx και κλείνει τη σύνδεση με μια αίσθηση ολοκλήρωσης. Το Nginx μπορεί τώρα να στείλει μια σελίδα σε έναν χρήστη για όσο διάστημα επιθυμεί, πρακτικά χωρίς να καταναλώνει πόρους του συστήματος. Το έργο του Apache στη θέση του θα συνοδευόταν από ένα αδικαιολόγητα υψηλό φορτίο στη μνήμη όταν λειτουργεί σχεδόν σε αδράνεια. Παρεμπιπτόντως, αυτή η περίπτωση χρήσης για το Nginx έχει άλλο όνομα: "frontend to Apache".

Nginx συν FastCGI.Το Apache μπορεί να μην χρειάζεται καθόλου εάν ο διερμηνέας της γλώσσας στην οποία είναι γραμμένα τα σενάρια του ιστότοπου υποστηρίζει την τεχνολογία FastCGI. Τέτοιες γλώσσες περιλαμβάνουν, για παράδειγμα, PHP, Perl και πολλές άλλες. Ωστόσο, σε αυτήν την περίπτωση ίσως χρειαστεί να τροποποιήσετε τους κωδικούς του σεναρίου.

Υπάρχουν πολλά λεπτομερή υλικά σχετικά με τον τρόπο εγκατάστασης και διαμόρφωσης του Nginx στο Διαδίκτυο. Μπορείτε να μάθετε περισσότερα για το Nginx στον ιστότοπο του προγραμματιστή του Igor Sysoev.

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

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

Σημείωση: Αυτό το σεμινάριο έγινε στο Ubuntu 12.04.

Ιεραρχία καταλόγου Nginx

Το Nginx αποθηκεύει αρχεία διαμόρφωσης στον κατάλογο /etc/nginx.

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

cd /etc/nginx
ls -F

conf.d/ koi-win naxsi.rules scgi_params uwsgi_params
fastcgi_params mime.types nginx.conf sites-available/win-utf
koi-utf naxsi_core.rules proxy_params sites-enabled/

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

Ο κατάλογος conf.d μπορεί επίσης να χρησιμοποιηθεί για την αποθήκευση διαμορφώσεων. Κάθε αρχείο με επέκταση .conf θα διαβάζεται όταν ξεκινά το Nginx. Η σύνταξη τέτοιων αρχείων δεν πρέπει να περιέχει σφάλματα.

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

Το κύριο αρχείο διαμόρφωσης Nginx είναι το nginx.conf.

αρχείο nginx.conf

Το αρχείο nginx.conf διαβάζει τα αντίστοιχα αρχεία ρυθμίσεων και τα συνδυάζει σε ένα ενιαίο αρχείο διαμόρφωσης κατά την εκκίνηση του διακομιστή.

Ανοίξτε το αρχείο:

sudo nano /etc/nginx/nginx.conf

χρήστης www-data;
worker_processes 4;
pid /var/run/nginx.pid;
εκδηλώσεις (
Worker_connections 768;
#multi_accept on;
}
http(
. . .

Οι πρώτες γραμμές δίνουν γενικές πληροφορίες για το Nginx. Ο χρήστης γραμμής www-data καθορίζει τον χρήστη με τον οποίο ξεκινά ο διακομιστής.

Η οδηγία pid καθορίζει πού θα αποθηκεύονται τα PID διεργασιών για εσωτερική χρήση. Η γραμμή worker_processes καθορίζει τον αριθμό των διεργασιών που μπορεί να υποστηρίξει ταυτόχρονα το Nginx.

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

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

Δομή αρχείου διαμόρφωσης Nginx

Το αρχείο διαμόρφωσης Nginx χωρίζεται σε μπλοκ.

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

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

Κατά τη διαμόρφωση του Nginx, είναι σημαντικό να θυμάστε τον ακόλουθο κανόνα: όσο υψηλότερο είναι το επίπεδο διαμόρφωσης, τόσο περισσότερα μπλοκ κληρονομούν αυτήν τη διαμόρφωση. Όσο χαμηλότερο είναι το επίπεδο διαμόρφωσης, τόσο πιο «ατομικό» είναι. Δηλαδή, εάν η παράμετρος X πρέπει να χρησιμοποιηθεί σε κάθε μπλοκ διακομιστή, τότε μια τέτοια παράμετρος πρέπει να τοποθετηθεί στο μπλοκ http.

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

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

gzip ενεργό?
gzip_disable "msie6";

Αυτό θα ενεργοποιήσει την υποστήριξη gzip για τη συμπίεση δεδομένων που αποστέλλονται στον πελάτη και θα απενεργοποιήσει το gzip για τον Internet Explorer 6 (καθώς αυτό το πρόγραμμα περιήγησης δεν υποστηρίζει συμπίεση δεδομένων).

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

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

Το μπλοκ http στο αρχείο nginx.conf τελειώνει ως εξής:

συμπεριλάβετε το /etc/nginx/conf.d/*.conf;
περιλαμβάνει /etc/nginx/sites-enabled/*.

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

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

Κλείστε το αρχείο nginx.conf. Τώρα πρέπει να μελετήσετε τις ρυθμίσεις μεμονωμένων τοποθεσιών.

Εικονικά μπλοκ Nginx

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

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

Διαθέσιμες τοποθεσίες cd
προεπιλογή sudo nano

root /usr/share/nginx/www;
ευρετήριο index.html index.htm;
server_name localhost;
τοποθεσία/(

}
τοποθεσία /έγγραφο/ (

ψευδώνυμο /usr/share/doc/;
αυτόματο ευρετήριο ενεργό?
επιτρέψτε 127.0.0.1;
αρνούνται όλα?

Το προεπιλεγμένο αρχείο σχολιάζεται πολύ καλά, αλλά στο παραπάνω παράδειγμα τα σχόλια παραλείπονται για απλότητα και ευκολία.

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

διακομιστής (
. . .
}

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

Η οδηγία root καθορίζει τον κατάλογο στον οποίο θα αποθηκευτεί το περιεχόμενο του ιστότοπου. Το Nginx θα αναζητήσει σε αυτόν τον κατάλογο αρχεία που ζητούνται από τον χρήστη. Από προεπιλογή αυτό είναι /usr/share/nginx/www.

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

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

Οδηγία ονόματος διακομιστή

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

Ένας αστερίσκος (*) στην αρχή ή στο τέλος ενός τομέα καθορίζει ένα όνομα με μάσκα, όπου ο αστερίσκος ταιριάζει με μέρος (ή πολλά μέρη) του ονόματος. Για παράδειγμα, το όνομα *.example.com θα ταιριάζει με τα ονόματα forum.example.com και www.animals.example.com.

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

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

Τα ονόματα διακομιστών που χρησιμοποιούν κανονικές εκφράσεις ξεκινούν με μια περισπωμένη (~). Δυστυχώς, αυτό το θέμα είναι πέρα ​​από το πεδίο αυτού του άρθρου.

Μπλοκ τοποθεσιών

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

Τέτοια μπλοκ μπορεί να περιέχουν μια διαδρομή uri (για παράδειγμα /doc/). Για να δημιουργηθεί μια πλήρης αντιστοίχιση μεταξύ τοποθεσίας και uri, χρησιμοποιείται το σύμβολο =. Ο χαρακτήρας ~ ταιριάζει με κανονικές εκφράσεις.

Ένα tilde ενεργοποιεί τη λειτουργία διάκρισης πεζών-κεφαλαίων, ενώ ένα tilde με έναν αστερίσκο ενεργοποιεί τη λειτουργία χωρίς διάκριση πεζών-κεφαλαίων.

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

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

Ως τελευταία σημείωση, ο Nginx προτιμά ακριβείς αντιστοιχίσεις. Εάν δεν υπάρχουν τέτοιες αντιστοιχίσεις, αναζητά μια τυπική έκφραση και, στη συνέχεια, αναζητά το URI. Για να αλλάξετε την προτεραιότητα αναζήτησης ενός URI, χρησιμοποιήστε τον συνδυασμό χαρακτήρων ^~.

Οδηγία try_files

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

Αυτό σας επιτρέπει να χρησιμοποιήσετε πρόσθετες παραμέτρους για να ορίσετε πώς το Nginx θα εξυπηρετεί αιτήματα.

Το προεπιλεγμένο αρχείο ρυθμίσεων έχει τη γραμμή:

try_files $uri $uri/ /index.html;

Αυτό σημαίνει ότι όταν λαμβάνεται ένα αίτημα που εξυπηρετείται από ένα μπλοκ τοποθεσίας, το Nginx θα προσπαθήσει πρώτα να εξυπηρετήσει το uri ως αρχείο (αυτή η συμπεριφορά καθορίζεται από τη μεταβλητή $uri).

Εάν ο διακομιστής δεν βρει αντιστοιχία για τη μεταβλητή $uri, θα προσπαθήσει να χρησιμοποιήσει το uri ως κατάλογο.

Χρησιμοποιώντας μια τελική κάθετο, ο διακομιστής ελέγχει την ύπαρξη ενός καταλόγου, για παράδειγμα $uri/.

Εάν δεν βρεθεί αρχείο ή κατάλογος, το Nginx εκτελεί το προεπιλεγμένο αρχείο (σε αυτήν την περίπτωση το index.html στον ριζικό κατάλογο του μπλοκ διακομιστή). Κάθε οδηγία try_files χρησιμοποιεί την τελευταία παράμετρο ως εναλλακτική, επομένως το αρχείο πρέπει να υπάρχει στο σύστημα.

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

Για παράδειγμα, εάν η τοποθεσία / το μπλοκ δεν μπορεί να βρει τον ζητούμενο πόρο, μπορεί να επιστρέψει ένα σφάλμα 404 αντί για ένα αρχείο index.html:

try_files $uri $uri/ =404;

Για να γίνει αυτό, πρέπει να βάλετε ένα σύμβολο ίσου και να ορίσετε τον κωδικό σφάλματος ως τελευταία παράμετρο (=404).

Επιπλέον επιλογές

Η οδηγία για το ψευδώνυμο επιτρέπει στο Nginx να εξυπηρετεί σελίδες μπλοκ τοποθεσίας εκτός ενός δεδομένου καταλόγου (για παράδειγμα, εκτός του root).

Για παράδειγμα, τα αρχεία που ζητούνται από το /doc/ θα εξυπηρετούνται από το /usr/share/doc/.

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

Οι γραμμές άδειας και άρνησης ελέγχουν την πρόσβαση στους καταλόγους.

συμπέρασμα

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

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

Ετικέτες: ,