FastCGI

Двоичный протокол связи

FastCGI — это двоичный протокол для взаимодействия интерактивных программ с веб-сервером . Это разновидность более раннего Common Gateway Interface (CGI). Основная цель FastCGI — сократить накладные расходы, связанные с взаимодействием между веб-сервером и программами CGI, позволяя серверу обрабатывать больше запросов веб-страниц за единицу времени.

История

Common Gateway Interface (CGI) — это спецификация интерфейса, позволяющая внешним приложениям взаимодействовать с веб-серверами. Приложения CGI работают в отдельных процессах , которые создаются в начале каждого запроса и завершаются в конце. Эта модель «один новый процесс на запрос» делает программы CGI очень простыми в реализации, но ограничивает эффективность и масштабируемость. При высоких нагрузках накладные расходы операционной системы на создание и уничтожение процессов становятся значительными. Кроме того, модель процесса CGI ограничивает методы повторного использования ресурсов, такие как повторное использование подключений к базам данных, кэширование в памяти и т. д.

Для устранения недостатков масштабируемости CGI компания Open Market разработала FastCGI и впервые представила его в своем продукте веб-сервера в середине 1990-х годов. Первоначально компания Open Market разработала FastCGI отчасти как конкурентный ответ на фирменные интерфейсы прикладного программирования (API) Netscape ( Netscape Server Application Programming Interface (NSAPI)) для разработки веб-приложений.

FastCGI, впервые разработанный Open Market, затем был реализован несколькими другими производителями веб-серверов. Однако его подход конкурировал с другими методами для ускорения и упрощения связи между сервером и подпрограммой. Модули Apache HTTP Server, такие как mod_perl и mod_php, появились примерно в то же время и быстро завоевали популярность. По состоянию на 2020 год [обновлять]все эти различные методы, включая CGI, остаются широко используемыми.

Подробности реализации

Вместо создания нового процесса для каждого запроса FastCGI использует постоянные процессы для обработки серии запросов. Эти процессы принадлежат серверу FastCGI, а не веб-серверу. [1]

Для обслуживания входящего запроса веб-сервер отправляет информацию о переменных окружения и запрос страницы в процесс FastCGI через сокет домена Unix , именованный канал или соединение протокола управления передачей (TCP). Ответы возвращаются из процесса на веб-сервер по тому же соединению, а затем веб-сервер доставляет этот ответ конечному пользователю . Соединение может быть закрыто в конце ответа, но как веб-сервер, так и процессы службы FastCGI сохраняются. [2]

Каждый отдельный процесс FastCGI может обрабатывать множество запросов в течение своего жизненного цикла, тем самым избегая накладных расходов на создание и завершение процесса по запросу. Обработка нескольких запросов одновременно может осуществляться несколькими способами: с использованием одного соединения с внутренним мультиплексированием (т. е. несколько запросов по одному соединению); с использованием нескольких соединений; или с помощью сочетания этих методов. Можно настроить несколько серверов FastCGI, что повышает стабильность и масштабируемость.

Администраторы и программисты веб-сайтов могут обнаружить, что разделение веб-приложений и веб-сервера в FastCGI имеет много преимуществ по сравнению со встроенными интерпретаторами ( mod_perl , mod_php и т. д.). Такое разделение позволяет перезапускать процессы сервера и приложений независимо друг от друга — важное соображение для загруженных веб-сайтов. Оно также позволяет реализовывать политики безопасности хостинга для каждого приложения, что является важным требованием для интернет-провайдеров и компаний веб-хостинга. [3] Различные типы входящих запросов могут быть распределены по определенным серверам FastCGI, которые были оборудованы для эффективной обработки этих типов запросов.

Веб-серверы, реализующие FastCGI

Примечание: если не указано иное, полнота реализации FastCGI неизвестна.
  • Apache HTTP-сервер (частичный)
    • Реализовано mod_fcgid . Этот модуль раньше был сторонним, но был предоставлен Apache Software Foundation (ASF) в качестве подпроекта Apache Server в 2009 году под руководством Криса Дарроха. [4] Он поддерживает только сокеты домена Unix, но не сокеты TCP. [5]
    • Также используется сторонний модуль mod_fastcgi . Некоторое время этот модуль больше не компилировался должным образом под Apache 2.4.x, [6] хотя эта проблема была решена с помощью форка оригинального проекта. [7]
    • Мультиплексирование запросов через одно соединение запрещено конструкцией Apache 1.x, [8] поэтому это не поддерживается.
    • В Apache 2.4 был добавлен mod_proxy_fcgi , поддерживающий TCP FastCGI-серверы.
  • Кэдди [9]
  • Чероки [10]
  • Гайавата [11]
    • Поддержка FastCGI для балансировки нагрузки
    • Поддерживает серверы FastCGI с chroot-окружением
  • Причал [12]
  • Kerio WebSTAR
  • Lighttpd [13]
  • Веб-сервер LiteSpeed
  • Microsoft IIS [14]
  • Nginx [15]
  • NaviServer
  • Веб-сервер Oracle iPlanet
  • httpd (8) OpenBSD [16]
  • Веб-сервер Open Market
  • Веб-сервер и сервер приложений Resin
  • веб-сервер Roxen
  • Веб-сервер ShimmerCat [17]
  • Веб-сервер Zeus

Языковые привязки для API

FastCGI может быть реализован на любом языке, поддерживающем сетевые сокеты . Поскольку «FastCGI — это протокол, а не реализация», он не привязан жестко ни к одному языку. Существуют интерфейсы прикладного программирования (API) для: [18]

Современные фреймворки, такие как Ruby on Rails , Catalyst , Django , Kepler и Plack, позволяют использовать как встроенные интерпретаторы ( например , mod_ruby , mod_perl , mod_python или mod_lua), так и FastCGI.

Ссылки

  1. ^ "Спецификация FastCGI". Open Market, Inc. 1996. Архивировано из оригинала 19 января 2016 года.
  2. ^ "FastCGI: Высокопроизводительный интерфейс веб-сервера". Open Market, Inc. 1996. Архивировано из оригинала 1 октября 2010 года.
  3. ^ Хайнлайн, Пол (1 ноября 1998 г.). "FastCGI: Persistent Applications for Your Web Server". Linux Journal . Получено 4 октября 2010 г.
  4. ^ Модуль Apache FastCGI mod_fcgid
  5. ^ Ошибка Debian #450748: Пожалуйста, добавьте поддержку серверов TCP/IP FastCGI
  6. ^ Проблемы с Apache 2.4 и PHP-FPM
  7. ^ libapache-mod-fastcgi на Github
  8. ^ "FastCGI – The Forgotten Treasure/ Section 2.3". Архивировано из оригинала 2010-02-08 . Получено 2006-02-21 .
  9. ^ Транспорт fastcgi — reverse_proxy (директива Caddyfile) — Документация Caddy
  10. ^ FastCGI для чероки
  11. ^ Руководство по FastCGI для Hiawatha
  12. ^ ab "Поддержка FastCGI в Jetty". Архивировано из оригинала 2020-03-24 . Получено 2017-03-23 ​​.
  13. ^ FastCGI для Lighttpd
  14. ^ "Расширение FastCGI для IIS6.0 – RTM". FastCGI для IIS . Microsoft. 2008-02-28 . Получено 2008-02-29 .
  15. ^ "Модуль FastCGI Nginx ngx_http_fastcgi_module". nginx.org . NGINX, Inc . Получено 20 июня 2021 г. .
  16. ^ Первоначальный коммит httpd(8) OpenBSD
  17. ^ "Технический лист". Архивировано из оригинала 2018-01-21 . Получено 2016-09-19 .
  18. ^ Библиотеки приложений, комплекты разработки
  19. ^ "Matreshka". Архивировано из оригинала 2018-01-20 . Получено 06.10.2011 .
  20. ^ ЭкстПаскаль
  21. ^ Как использовать FastCGI из Common Lisp
  22. ^ Гоанна Эйфель
  23. ^ jFastCGI, Java-сервлет, реализующий протокол FastCGI
  24. ^ node-fastcgi npm-пакет
  25. ^ Существует несколько модулей FastCGI для Perl: FCGI (скомпилированный модуль, написанный на C), FCGI::Async (для асинхронных приложений FastCGI), AnyEvent::FCGI (для приложений на основе AnyEvent), FCGI::EV (для приложений на основе EV), CGI::Fast (интерфейс Perl CGI для FastCGI), FCGI::Client (клиентская библиотека FastCGI) и Net::FastCGI (константы и функции для построения и анализа сообщений FastCGI).
  26. ^ "PHP: Менеджер процессов FastCGI (FPM) - Руководство".
  27. ^ Более быстрый CGI с HHVM
  28. ^ Существует несколько контейнеров Rust: реализация прослушивателя — fastcgi, а fastcgi-client — реализация клиента.
  29. ^ REAL Studio Web Edition, создает веб-приложения, вызываемые через FastCGI. Архивировано 08.02.2011 на Wayback Machine.
  • "Архивы FastCGI.com" . Получено 2022-05-01 .— форк/зеркало неработающего сайта FastCGI
    • Марк Р. Браун (29 апреля 1996 г.). "Спецификация FastCGI". Версия документа 1.0. Open Market, Inc. Получено 01.05.2022 .
  • "FastCGI". Архивировано из оригинала 2016-03-20.— Старая домашняя страница FastCGI, как она выглядела во время работы
  • Реализации
    • "mod_fcgid - модуль интерфейса FastCGI для Apache 2 - проект Apache HTTP Server". Версия 2.3.9. Apache Software Foundation. 2013-10-08 . Получено 2022-05-01 .— Реализация для Apache httpd
    • "FastCGI <fastCgi>". Документация Internet Information Server . Microsoft. 2022-04-06. Архивировано из оригинала 2022-01-27 . Получено 2022-05-01 .— Реализация для Microsoft IIS
    • "Прокси FastCGI Схема Apache Модуль". ZenProjects. 2017-10-09 . Получено 2022-05-01 .— Экспериментальная реализация для Apache 2.x mod_proxy
Взято с "https://en.wikipedia.org/w/index.php?title=FastCGI&oldid=1260734844"