FastCGI - FastCGI
Эта статья включает в себя список общих Рекомендации, но он остается в основном непроверенным, потому что ему не хватает соответствующих встроенные цитаты.Июнь 2010 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
FastCGI это двоичный протокол для взаимодействия интерактивных программ с веб сервер. Это вариант более раннего Общий интерфейс шлюза (Графика). Основная цель FastCGI - снизить накладные расходы, связанные с взаимодействием между веб-сервером и программами CGI, позволяя серверу обрабатывать больше запросов веб-страниц в единицу времени.
История
Общий интерфейс шлюза (CGI) - это протокол для взаимодействия внешних приложений с веб-серверами. Приложения CGI запускаются отдельно процессы, которые создаются в начале каждого запроса и удаляются в конце. Эта модель «один новый процесс на запрос» делает программы CGI очень простыми для реализации, но ограничивает эффективность и масштабируемость. При высоких нагрузках Операционная система накладные расходы на создание и уничтожение процессов становятся значительными. Кроме того, модель процесса CGI ограничивает методы повторного использования ресурсов, такие как повторное использование соединений с базой данных, кэширование в памяти и т. Д.
Чтобы устранить недостатки масштабируемости CGI, Открытый рынок разработали FastCGI и впервые представили его в своем продукте для веб-серверов в середине 1990-х годов. Изначально Open Market разработал FastCGI отчасти как конкурентный ответ на Netscape проприетарный, в процессе интерфейсы прикладного программирования (API) (Интерфейс программирования приложений сервера Netscape (NSAPI)) для разработки веб-приложений.
Сначала FastCGI был разработан компанией Open Market, а затем был реализован несколькими другими производителями веб-серверов. Однако его подход конкурировал с другими методами для ускорения и упрощения взаимодействия сервер-подпрограмма. HTTP-сервер Apache модули, такие как 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 неизвестна
- HTTP-сервер Apache (частичный)
- Осуществляется mod_fcgid. Этот модуль раньше был сторонним, но был предоставлен Фонд программного обеспечения Apache (ASF) в качестве подпроекта сервера Apache в 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-серверы
- Причал[12]
- Kerio WebSTAR
- Lighttpd[13]
- Веб-сервер LiteSpeed
- Microsoft IIS[14]
- Nginx
- NaviServer
- Веб-сервер Oracle iPlanet
- OpenBSD с httpd (8)[15]
- Открытый рынок веб сервер
- Смола веб-сервер и сервер приложений
- Роксен веб сервер
- ShimmerCat веб сервер[16]
- Веб-сервер Zeus
Языковые привязки для своего API
FastCGI может быть реализован на любом языке, поддерживающем сетевые розетки. Поскольку «FastCGI - это протокол, а не реализация», он не привязан к одному языку. Интерфейсы прикладного программирования (API) существуют для:[17]
- Ада[18]
- Delphi, Лазарь Free Pascal[19]
- C, C ++
- Курица Схема
- Common Lisp[20]
- D
- Эйфель[21]
- Erlang
- ГнуКОБОЛ
- Идти
- Хитрость Схема
- Haskell
- VSI BASIC для OpenVMS
- Ява[22][12]
- Lua
- node.js[23]
- OCaml
- Perl[24]
- PHP (через php-fpm,[25] или же HipHop для PHP[26])
- Python
- Рубин
- Ржавчина[27]
- Маленький Эйфелева
- Болтовня: FasTalk и Дельфин Smalltalk
- Tcl
- WebDNA
- Вала (через привязки C)
- Xojo (ранее Realbasic, REAL Studio)[28]
Последние фреймворки, такие как Рубин на рельсах, Катализатор, Джанго, Кеплер и Plack разрешить использование со встроенными интерпретаторами (mod_ruby, mod_perl, mod_python или же mod_lua, например) или FastCGI.
Рекомендации
- ^ «Спецификация FastCGI». Open Market, Inc. 1996. Архивировано с оригинал 19 января 2016 г.
- ^ «FastCGI: высокопроизводительный интерфейс веб-сервера». Open Market, Inc. 1996. Архивировано с оригинал 1 октября 2010 г.
- ^ Хайнлайн, Пол (1 ноября 1998 г.). «FastCGI: постоянные приложения для вашего веб-сервера». Linux журнал. Получено 4 октября 2010.
- ^ Модуль FastCGI apache mod_fcgid
- ^ Ошибка Debian № 450748: добавьте поддержку серверов TCP / IP FastCGI
- ^ Проблемы с Apache 2.4 и PHP-FPM
- ^ libapache-mod-fastcgi на Github
- ^ «FastCGI - Забытые сокровища / Раздел 2.3». Архивировано из оригинал на 2010-02-08. Получено 2006-02-21.
- ^ Руководство пользователя Caddy - FastCGI
- ^ FastCGI для Cherokee
- ^ FastCGI howto для Hiawatha
- ^ а б Поддержка FastCGI в Jetty
- ^ FastCGI для Lighttpd
- ^ «Расширение FastCGI для IIS6.0 - RTM». FastCGI для IIS. Microsoft. 2008-02-28. Получено 2008-02-29.
- ^ Начальная фиксация httpd (8) OpenBSD
- ^ «Архивная копия». Архивировано из оригинал на 2018-01-21. Получено 2016-09-19.CS1 maint: заархивированная копия как заголовок (связь)
- ^ Библиотеки приложений, комплекты для разработки
- ^ Матрешка
- ^ ExtPascal
- ^ Как использовать FastCGI из Common Lisp
- ^ Гоанна Эйфель
- ^ jFastCGI, сервлет Java, реализующий протокол FastCGI
- ^ пакет node-fastcgi npm
- ^ Для Perl существует несколько модулей FastCGI:FCGI (скомпилированный модуль, написанный на C),FCGI :: Async (для асинхронных приложений FastCGI),AnyEvent :: FCGI (за AnyEvent -основные приложения),FCGI :: EV (за EV -основные приложения),CGI :: Быстро (Perl CGI -подобный интерфейс для FastCGI),FCGI :: Клиент (клиентская библиотека FastCGI) и Сеть :: FastCGI (константы и функции для создания и анализа сообщений FastCGI).
- ^ [1]
- ^ FasterCGI с HHVM
- ^ [2]
- ^ REAL Studio Web Edition, создает веб-приложения, вызываемые через FastCGI В архиве 2011-02-08 в Wayback Machine