FastCGI

редактировать

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

Содержание
  • 1 История
  • 2 Подробности реализации
  • 3 Веб-серверы, реализующие FastCGI
  • 4 Языковые привязки для его API
  • 5 Ссылки
  • 6 Внешние ссылки
История

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

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

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

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

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

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

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

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

Веб-серверы, реализующие FastCGI
Примечание: если не указано иное, полнота реализации FastCGI неизвестна
  • HTTP-сервер Apache (частично)
    • Реализуется с помощью mod_fcgid. Этот модуль раньше был сторонним, но был предоставлен The Apache Software Foundation (ASF) в качестве подпроекта сервера Apache в 2009 году, которым руководил Крис Дарроч. Он поддерживает только сокеты домена Unix, но не TCP сокеты.
    • Также используется сторонний модуль mod_fastcgi. Некоторое время этот модуль больше не компилируется должным образом под Apache 2.4.x, хотя эта проблема была решена с помощью форка исходного проекта.
    • Мультиплексирование запросов через одно соединение запрещено дизайном Apache 1.x, поэтому это не поддерживается
    • В Apache 2.4 был добавлен mod_proxy_fcgi, поддерживающий серверы TCP FastCGI.
  • Caddy
  • Cherokee
  • Hiawatha
    • Балансировка нагрузки Поддержка FastCGI
    • Поддержка chrooted FastCGI-серверов
  • Jetty
  • Kerio WebSTAR
  • Lighttpd
  • LiteSpeed ​​Web Server
  • Microsoft IIS
  • Nginx
  • NaviServer
  • Oracle iPlanet Веб-сервер
  • OpenBSD httpd (8)
  • Open Market веб-сервер
  • Resin веб-сервер и сервер приложений
  • Roxen веб сервер
  • ShimmerCat веб-сервер
  • веб-сервер Zeus
Языковые привязки для его API

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

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

Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-20 11:27:09
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте