NGinx zazwyczaj wysyła żądania do procesu zarządzania FastCGI w celu przetworzenia, na przykład PHP-FPM to implementacja protokołu Fastcgi, hipernadzorcy zarządzającego PHP-CGI. Oto schemat przepływu:
CGI oznacza "Common Gateway Interface" (Common Gateway Interface), narzędzie umożliwiające serwerom HTTP "komunikację" z programami na Twoim lub innych komputerach, a ich programy muszą działać na serwerze WWW.
Wady CGI: Gdy każde żądanie wchodzi, CGI rozgałęzia nowy proces, a następnie weźmy na przykład PHP, każde żądanie zużywa znaczną ilość pamięci, więc po uruchomieniu będzie całkowicie GG.
Aby rozwiązać ten problem, stworzono fastCgi.
FastCGI jest jak długowieczne CGI – można je wykonywać cały czas, o ile jest aktywowane, nie zajmuje czasu na forkowanie za każdym razem (to najbardziej krytykowany tryb fork-and-execute w CGI). Obsługuje także rozproszone obliczenia, co oznacza, że programy FastCGI mogą być uruchamiane na hostach innych niż serwer WWW i akceptować żądania z innych serwerów WWW.
Test
Utwórz nowy plik php w katalogu D:\dev_tools\nginx-1.20.0\html\php, aby zapobiec zgłaszaniu błędu 404 w przypadku nieodnalezienia pliku przez nginx, w następujący sposób:
Nginx fastcgi_pass jest skonfigurowany następująco:
Dane przesyłane przez nginx fastcgi_pass muszą być analizowane zgodnie z protokołem FastCGIJeśli jesteś zainteresowany, możesz się przekonać – używam tutaj sokit, aby włączyć nasłuch TCP dla prostego odbioru, spróbuj użyć przeglądarki, aby uzyskać dostęp:http://127.0.0.1:22229/itsvse.php, jak pokazano na poniższym rysunku:
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-żywy.. HTTP_CACHE_CONTROLmax-wiek=0.@HTTP_SEC_CH_UA"Chrom"; v="92", " Nie 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, podobnie jak Gecko) Chrome/92.0.4515.131 Safari/537.36.....HTTP_ACCEPTtext/html, application/xhtml+xml, application/xml; q=0,9,obraz/avif,obraz/webp,obraz/apng,*/*; q=0,8, application/signed-exchange; 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, spuść, br.. HTTP_ACCEPT_LANGUAGEzh-CN,zh; q=0,9,en; q=0,8...................... (Koniec)
|