NGinX зазвичай надсилає запити до процесу управління FastCGI для обробки, наприклад, сайт PHP, PHP-FPM є реалізацією протоколу FastCGI, гіпервізора, який керує 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, якщо файл не знайдено, наступним чином:
Nginx fastcgi_pass налаштований наступним чином:
Дані, які передає 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", " не 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, як Gecko) Chrome/92.0.4515.131 Safari/537.36.....HTTP_ACCEPTtext/html,application/xhtml+xml,application/xml; q=0.9,image/avif,image/webp,image/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, здувайте, брате... HTTP_ACCEPT_LANGUAGEzh-CN,zh; q=0,9,en; q=0,8...................... (Кінець)
|