Πώς να συνδέσετε το NGINX σε PHP-FPM χρησιμοποιώντας υποδοχή UNIX ή TCP/IP


Ο διακομιστής web NGINX (ως αντίστροφος διακομιστής μεσολάβησης) εξυπηρετεί εφαρμογές PHP μέσω του πρωτοκόλλου FastCGI (ως διακομιστής εφαρμογών υποστήριξης). Το NGINX χρησιμοποιεί το PHP-FPM (FastCGI Process Manager), μια εναλλακτική εφαρμογή PHP FastCGI που εκτελείται στο παρασκήνιο ως δαίμονας, ακούγοντας Αιτήματα CGI. Έρχεται με επιπλέον δυνατότητες που έχουν σχεδιαστεί για την τροφοδοσία ιστότοπων ή εφαρμογών web με μεγάλο φορτίο, αλλά μπορεί να χρησιμοποιηθεί για ιστότοπους οποιουδήποτε μεγέθους.

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

Για να αποδεχτείτε αιτήματα FastCGI από το NGINX, το PHP-FPM μπορεί είτε να ακούσει σε υποδοχή TCP/IP ή τομέα UNIX πρίζα. Όποια διεύθυνση και αν επιλέξετε να χρησιμοποιήσετε είναι αυτή που χρησιμοποιεί το NGINX για τη σύνδεση (αιτήματα διακομιστή μεσολάβησης) στο PHP-FPM, χρησιμοποιώντας την οδηγία fastcgi_pass.

Αυτός ο οδηγός εξηγεί πώς μπορείτε να ρυθμίσετε το NGINX σε εφαρμογές διακομιστή PHP χρησιμοποιώντας το PHP-FPM. Περιγράφει πότε πρέπει να χρησιμοποιείται μια υποδοχή TCP/IP ή υποδοχή τομέα UNIX για τη σύνδεση του NGINX στο PHP-FPM και γιατί.

Αυτός ο οδηγός προϋποθέτει ότι έχετε εγκαταστήσει τα NGINX και PHP-FPM στο σύστημά σας Linux, διαφορετικά δείτε:

  • Πώς να εγκαταστήσετε τον διακομιστή LEMP στο CentOS 8
  • Πώς να εγκαταστήσετε τη στοίβα LEMP PhpMyAdmin στον διακομιστή Ubuntu 20.04
  • Τρόπος εγκατάστασης NGINX, MySQL/MariaDB και PHP στο RHEL 8
  • Πώς να εγκαταστήσετε το LEMP σε διακομιστή Debian 10

Τι πρέπει να χρησιμοποιήσω: UNIX Domain Socket ή TCP/IP Socket;

Οι υποδοχές τομέα UNIXIPC) είναι ένα μέσο επικοινωνίας μεταξύ διεργασιών (IPC) που επιτρέπουν την αποτελεσματική ανταλλαγή δεδομένων μεταξύ διεργασιών που εκτελούνται στο ίδιο λειτουργικό σύστημα ενώ το TCP Οι υποδοχές /IPΤομέας Διαδικτύου) επιτρέπουν στις διεργασίες να επικοινωνούν μέσω ενός δικτύου.

Σε αντίθεση με μια υποδοχή TCP/IP που προσδιορίζει έναν διακομιστή με μια διεύθυνση IP και μια θύρα (π.χ. 127.0.0.1:9000), μπορείτε να συνδέσετε έναν διακομιστή σε μια υποδοχή τομέα UNIX χρησιμοποιώντας ένα όνομα διαδρομής αρχείου (π.χ. /run/php-fpm/www.sock), το οποίο είναι ορατό στο σύστημα αρχείων.

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

Με αυτόν τον τρόπο, μια υποδοχή τομέα UNIX είναι ασφαλής επειδή μόνο οι διεργασίες στον τοπικό κεντρικό υπολογιστή μπορούν να τη χρησιμοποιήσουν. Μια υποδοχή TCP/IP μπορεί να εκτεθεί στο Διαδίκτυο δημιουργώντας κίνδυνο για την ασφάλεια, εκτός εάν εφαρμοστούν επιπλέον μέτρα ασφαλείας, όπως ένα τείχος προστασίας.

Είναι σημαντικό ότι η χρήση μιας υποδοχής τομέα UNIX δεν είναι το ίδιο με τη χρήση μιας υποδοχής TCP/IP όσον αφορά την απόδοση, αρκετές δοκιμές και δείκτες αναφοράς έχουν αποδείξει ότι οι υποδοχές τομέα UNIX είναι ταχύτερες. Το κύριο μειονέκτημα των υποδοχών τομέα UNIX είναι ότι είναι λιγότερο επεκτάσιμες, υποστηρίζουν μόνο επικοινωνία μεταξύ διεργασιών μέσα στο ίδιο λειτουργικό σύστημα (OS).

Πού μπορώ να ρυθμίσω τη διεύθυνση ακρόασης PHP-FPM;

Μπορείτε να διαμορφώσετε τη διεύθυνση PHP-FPM που ακούει σε ένα αρχείο διαμόρφωσης χώρου συγκέντρωσης πόρων. Σημειώστε ότι με το PHP-FPM, μπορείτε να εκτελέσετε πολλές ομάδες διεργασιών με διαφορετικές ρυθμίσεις. Το προεπιλεγμένο pool ονομάζεται www.

Η τοποθεσία του αρχείου διαμόρφωσης του χώρου συγκέντρωσης πόρων εξαρτάται από τον τρόπο εγκατάστασης των PHP και PHP-FPM σε ένα σύστημα Linux (είτε πρόκειται για προεπιλεγμένη/μονή έκδοση είτε για πολλές εκδόσεις ταυτόχρονα) .

Για παράδειγμα, στο CentOS 8, με μία έκδοση, όλα τα αρχεία διαμόρφωσης PHP βρίσκονται στον κατάλογο /etc και στον προεπιλεγμένο PHP-FPM Το αρχείο διαμόρφωσης pool (www) είναι /etc/php-fpm.d/www.conf:

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

# ls /etc/php*

Στο Ubuntu 20.04, τα αρχεία διαμόρφωσης PHP βρίσκονται στον κατάλογο /etc/php// και στον προεπιλεγμένο PHP-FPM το αρχείο διαμόρφωσης pool (www) είναι /etc/php//fpm/pool.d/www.conf:

$ ls /etc/php/7.4/

Διαμόρφωση PHP-FPM για ακρόαση σε υποδοχή τομέα UNIX

Για να διαμορφώσετε το PHP-FPM για ακρόαση σε μια υποδοχή τομέα UNIX, ανοίξτε το προεπιλεγμένο αρχείο διαμόρφωσης του χώρου συγκέντρωσης PHP-FPM, χρησιμοποιώντας το αγαπημένο σας πρόγραμμα επεξεργασίας κειμένου.

$ sudo vim /etc/php/7.4/fpm/pool.d/www.conf	#Ubuntu/Debian
OR
# vim /etc/php-fpm.d/www.conf			#CentOS/RHEL/Fedora

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

listen = /run/php/php7.4-fpm.sock	#Ubuntu/Debian
OR
listen = /run/php-fpm/www.sock		#CentOS/RHEL/Fedora

Εάν χρησιμοποιείτε υποδοχή τομέα UNIX, πρέπει επίσης να ορίσετε τα κατάλληλα δικαιώματα ανάγνωσης/εγγραφής για το αρχείο, ώστε να επιτρέπονται οι συνδέσεις από τον διακομιστή ιστού NGINX. Από προεπιλογή, το NGINX εκτελείται ως χρήστης και ομάδα nginx σε CentOS/RHEL/Fedora και www-data στο Ubuntu και Debian.

Βρείτε λοιπόν τις παραμέτρους listen.owner και listen.group και ορίστε τις ανάλογα. Επίσης, ορίστε τη λειτουργία σε 0660 χρησιμοποιώντας την παράμετρο listen.mode.

------------- On Debian and Ubuntu -------------
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

------------- On CentOS/RHEL and Fedora  -------------
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

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

Διαμόρφωση PHP-FPM για ακρόαση σε υποδοχή TCP/IP

Αν και μια υποδοχή τομέα UNIX είναι ταχύτερη από μια υποδοχή TCP/IP, η πρώτη είναι λιγότερο επεκτάσιμη, επειδή μπορεί να υποστηρίξει μόνο επικοινωνία μεταξύ διεργασιών στο ίδιο λειτουργικό σύστημα. Εάν το NGINX και ο διακομιστής εφαρμογών υποστήριξης (PHP-FPM) εκτελούνται σε διαφορετικά συστήματα, θα πρέπει να διαμορφώσετε το PHP-FPM για ακρόαση μια υποδοχή TCP/IP για συνδέσεις.

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

listen = 127.0.0.1:3000

Διαμόρφωση του NGINX ώστε να λειτουργεί με τον διακομιστή εφαρμογών PHP-FPM

Αφού διαμορφώσετε τη διεύθυνση PHP-FPM στην οποία ακούει, θα πρέπει να ρυθμίσετε το NGINX ώστε να ζητά διακομιστή μεσολάβησης μέσω αυτής της διεύθυνσης, χρησιμοποιώντας το fastcgi_pass παράμετρος διαμόρφωσης, σε αρχείο διαμόρφωσης μπλοκ εικονικού διακομιστή.

Για παράδειγμα, εάν το αρχείο διαμόρφωσης για τον ιστότοπό σας είναι /etc/nginx/conf.d/example.com.conf, ανοίξτε το για επεξεργασία.

# vim /etc/nginx/conf.d/example.com.conf 

Αναζητήστε το μπλοκ location για την επεξεργασία αρχείων .php και ορίστε την παράμετρο fastcgi_pass ως εξής, εάν έχετε ρυθμίσει το PHP-FPM να ακούει σε ένα UNIX υποδοχή τομέα.

fastcgi_pass unix:/run/php/php7.4-fpm.sock	#Ubuntu/Debian
OR
fastcgi_pass unix:/run/php-fpm/www.sock		#CentOS/RHEL/Fedora

Ή χρησιμοποιήστε μια διεύθυνση TCP/IP εάν έχετε διαμορφώσει το PHP-FPM για ακρόαση σε μια υποδοχή TCP/IP. Εάν ο διακομιστής εφαρμογών υποστήριξης (PHP-FPM) εκτελείται σε ξεχωριστό διακομιστή (αντικαταστήστε τον 10.42.0.10 με τη διεύθυνση IP του μηχανήματος στον οποίο βρίσκεται ο διακομιστής PHP-FPM FastCGI τρέχει).

fastcgi_pass  10.42.0.10:3000;

Σημαντικό: Στο CentOS 8, ο PHP-FPM ορίζεται ως διακομιστής upstream στο /etc/nginx/conf.d/php-fpm.conf αρχείο, σε ένα μπλοκ upstream, με το όνομα php-fpm.

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

upstream php-fpm {
        server unix:/run/php-fpm/www.sock;
}

και στο αρχείο μπλοκ διακομιστή του ιστότοπού σας, απλώς ορίστε την παράμετρο fastcgi_pass όπως φαίνεται.

fastcgi_pass php-fpm;

Αφού κάνετε αλλαγές στις διαμορφώσεις PHP-FPM και NGINX, ελέγξτε τη σύνταξη διαμόρφωσής τους για ορθότητα ως εξής.

------------- On Debian and Ubuntu -------------
$ sudo php-fpm -t
$ sudo nginx -t

------------- On CentOS/RHEL and Fedora  -------------
# php-fpm -t
# nginx -t

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

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

------------- On Debian and Ubuntu -------------
$ sudo systemctl restart nginx
$ sudo systemctl restart php7.4-fpm

------------- On CentOS/RHEL and Fedora  -------------
# systemctl restart nginx
# systemctl restart php-fpm

Εάν λάβετε σφάλματα, μπορείτε να ελέγξετε τα αρχεία καταγραφής NGINX και PHP-FPM χρησιμοποιώντας την εντολή cat.

------------- On Debian and Ubuntu -------------
$ cat /var/log/nginx/error.log
$ cat /var/log/php7.4-fpm.log

------------- On CentOS/RHEL and Fedora  -------------
$ cat /var/log/nginx/error.log
$ cat /var/log/php-fpm/www-error.log

Αυτό ήταν το μόνο που είχαμε για εσάς. Η παρακάτω ενότητα σχολίων μπορεί να χρησιμοποιηθεί για να κάνετε ερωτήσεις. Για περισσότερες πληροφορίες, ανατρέξτε στην τεκμηρίωση PHP-FPM.