NGINX stuurt over het algemeen verzoeken naar het FastCGI-beheerproces om te verwerken; neem bijvoorbeeld de PHP-site als voorbeeld: PHP-FPM is een implementatie van het FastCGI-protocol, een hypervisor die php-CGI beheert. Hier is het stroomdiagram:
CGI staat voor "Common Gateway Interface", een tool waarmee HTTP-servers kunnen "communiceren" met programma's op jouw of andere machines, en hun programma's moeten op een webserver draaien.
Nadelen van CGI: Wanneer elk verzoek binnenkomt, zal CGI een nieuw proces forken, en dan PHP als voorbeeld nemen; elk verzoek verbruikt een aanzienlijke hoeveelheid geheugen, zodat het bij het starten volledig GG is.
Om dit probleem op te lossen werd fastCgi opgericht.
FastCGI is als een langlevende CGI, het kan altijd worden uitgevoerd, zolang het geactiveerd is, kost het niet elke keer tijd om te forken (dit is de meest bekritiseerde fork-and-execute-modus van CGI). Het ondersteunt ook gedistribueerd rekenen, wat betekent dat FastCGI-programma's op hosts anders dan de webserver kunnen worden uitgevoerd en verzoeken van andere webservers kunnen accepteren.
Test
Maak een nieuw php-bestand aan onder de D:\dev_tools\nginx-1.20.0\html\php-map om te voorkomen dat nginx een 404-fout rapporteert wanneer het bestand niet gevonden kan worden, als volgt:
NGINX fastcgi_pass is als volgt geconfigureerd:
De gegevens die door nginx fastcgi_pass worden verzonden, moeten worden ontleed volgens het FastCGI-protocolAls je geïnteresseerd bent, kun je het uitzoeken, ik gebruik sokit hier om TCP-luisteren voor eenvoudige ontvangst in te schakelen, probeer via een browser toegang te krijgen:http://127.0.0.1:22229/itsvse.php, zoals getoond in de onderstaande figuur:
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-levend.. HTTP_CACHE_CONTROLmax-leeftijd=0.@HTTP_SEC_CH_UA"Chroom"; v="92", " Not A; Brand"; 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, zoals Gecko) Chrome/92.0.4515.131 Safari/537.36.....HTTP_ACCEPTtext/html,application/xhtml+xml,application/xml; q=0.9,afbeelding/avif,afbeelding/webp,afbeelding/apng,*/*; q=0.8,applicatie/ondertekende-uitwisseling; 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, laat je leeg, br.. HTTP_ACCEPT_LANGUAGEzh-CN,zh; q=0,9,en; q=0,8...................... (Einde)
|