Το nginx γενικά στέλνει αιτήματα στη διαδικασία διαχείρισης Fastcgi για επεξεργασία, λαμβάνοντας ως παράδειγμα τον ιστότοπο PHP, το php-fpm είναι μια υλοποίηση του πρωτοκόλλου Fastcgi, ενός hypervisor που διαχειρίζεται το php-cgi. Εδώ είναι το διάγραμμα ροής:
Το CGI σημαίνει "Common Gateway Interface", ένα εργαλείο για διακομιστές HTTP για να "μιλούν" με προγράμματα στον υπολογιστή σας ή σε άλλα μηχανήματα και τα προγράμματά τους πρέπει να εκτελούνται σε διακομιστή ιστού.
Μειονεκτήματα του CGI: Όταν εισάγεται κάθε αίτημα, το CGI θα διαχωρίσει μια νέα διαδικασία και, στη συνέχεια, θα πάρει ως παράδειγμα την PHP, κάθε αίτημα καταναλώνει σημαντική ποσότητα μνήμης, έτσι ώστε όταν εκκινηθεί, θα είναι εντελώς GG.
Για την επίλυση αυτού του προβλήματος, δημιουργήθηκε το fastCgi.
Το FastCGI είναι σαν ένα μακρόβιο CGI, μπορεί να εκτελεστεί συνεχώς, αρκεί να είναι ενεργοποιημένο, δεν χρειάζεται χρόνος για να διακλαδωθεί κάθε φορά (αυτή είναι η πιο επικριτική λειτουργία fork-and-execute του CGI). Υποστηρίζει επίσης κατανεμημένους υπολογιστές, πράγμα που σημαίνει ότι τα προγράμματα FastCGI μπορούν να εκτελεστούν σε κεντρικούς υπολογιστές διαφορετικούς από τον διακομιστή ιστού και να δέχονται αιτήματα από άλλους διακομιστές ιστού.
Δοκιμή
Δημιουργήστε ένα νέο αρχείο php στον κατάλογο D:\dev_tools\nginx-1.20.0\html\php για να αποτρέψετε το nginx από το να αναφέρει ένα σφάλμα 404 όταν το αρχείο δεν μπορεί να βρεθεί, ως εξής:
Το fastcgi_pass Nginx διαμορφώνεται ως εξής:
Τα δεδομένα που μεταδίδονται από το nginx fastcgi_pass πρέπει να αναλυθούν σύμφωνα με το πρωτόκολλο FastCGIΕάν ενδιαφέρεστε, μπορείτε να πάτε για να μάθετε, χρησιμοποιώ το sokit εδώ για να ενεργοποιήσω μια ακρόαση TCP για απλή λήψη, δοκιμάστε να χρησιμοποιήσετε ένα πρόγραμμα περιήγησης για πρόσβαση:http://127.0.0.1:22229/itsvse.php, όπως φαίνεται στο παρακάτω σχήμα:
22:06:07 DAT ---> [TCP] 127.0.0.1:1032 <1136> ..................... B.... QUERY_STRING.. REQUEST_METHODGET.. CONTENT_TYPE.. CONTENT_LENGTH.. SCRIPT_NAME/itsvse.php.. REQUEST_URI/itsvse.php.. DOCUMENT_URI/itsvse.php». DOCUMENT_ROOTD:/dev_tools/nginx-1.20.0/html/php.. SERVER_PROTOCOLHTTP/1.1..REQUEST_SCHEMEhttp.. GATEWAY_INTERFACECGI/1.1..SERVER_SOFTWAREnginx/1.20.0..REMOTE_ADDR127.0.0.1.. REMOTE_PORT1025.. SERVER_ADDR127.0.0.1.. SERVER_PORT22229.. SERVER_NAME.. REDIRECT_STATUS200.. HTTP_HOST127.0.0.1:22229..HTTP_CONNECTIONkeep-ζωντανός.. HTTP_CACHE_CONTROLmax-age=0.@HTTP_SEC_CH_UA"Χρώμιο"; v="92", " Όχι Α; Μάρκα"; v="99", "Google Chrome"; v="92".. HTTP_SEC_CH_UA_MOBILE?0..HTTP_UPGRADE_INSECURE_REQUESTS1.sHTTP_USER_AGENTMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, όπως το Gecko) Chrome/92.0.4515.131 Safari/537.36.....HTTP_ACCEPTtext/html,application/xhtml+xml,application/xml; q=0.9,εικόνα/avif,εικόνα/webp,εικόνα/apng,*/*; q=0.8, εφαρμογή/υπογεγραμμένη ανταλλαγή; v=b3; q=0.9..HTTP_SEC_FETCH_SITEnone.. HTTP_SEC_FETCH_MODEnavigate.. HTTP_SEC_FETCH_USER?1..HTTP_SEC_FETCH_DESTdocument.. HTTP_ACCEPT_ENCODINGgzip, ξεφουσκώνω, br.. HTTP_ACCEPT_LANGUAGEzh-CN,zh; q=0,9,en; q=0,8...................... (Τέλος)
|