Интерфейс FastCGI — клиент-серверный протокол взаимодействия веб-сервера и приложения, дальнейшее развитие технологии CGI. По сравнению с CGI является более производительным и безопасным.

FastCGI снимает множество ограничений CGI-программ. Недостаток CGI-программ — в том, что они должны быть перезапущены веб-сервером при каждом запросе, — что приводит к понижению производительности. FastCGI (вместо того, чтобы создавать новые процессы для каждого нового запроса) использует постоянно запущенные процессы для обработки множества запросов; это позволяет экономить время.

В то время как CGI-программы взаимодействуют с сервером через STDIN и STDOUT запущенного CGI-процесса, FastCGI-процессы используют Unix Domain Sockets или TCP/IP для связи с сервером. Это даёт следующее преимущество над обычными CGI-программами: FastCGI-программы могут быть запущены не только на этом же сервере, но и где угодно в сети. Также возможна обработка запросов несколькими FastCGI-процессами, работающими параллельно.

lighttpd включает в себя внутренний распределитель нагрузки FastCGI, который может использоваться для распределения сразу на несколько FastCGI-серверов. В отличие от иных решений, в кластере должен находиться только FastCGI-процесс, а не целый веб-сервер. Это позволяет использовать FastCGI-процессу больше ресурсов, по сравнению, например, с load-balancer+apache+mod_php.

При сравнении php-FastCGI с apache+mod_php необходимо обращать внимание на то, что FastCGI обеспечивает дополнительную безопасность, такую как, например, запуск FastCGI-процесса под учётной записью пользователя, отличного от пользователя веб-сервера, а также может находиться в chroot'е, отличном от chroot'а веб-сервера.

При сравнении perl-FastCGI с apache+mod_perl(1,2), кроме вышеуказанного, заметно, что для разделяемого использования памяти между процессами, реализуемого в mod_perl через startup.pl, необходим FastCGI-менеджер процессов, реализованный на Perl. Это реализуется модулем FCGI::ProcManager и его надстройкой FCGI::Spawn.

Веб-серверы, поддерживающие FastCGI Abyss Web Server Apache HTTP-сервер (частично) Используются сторонние модули mod_fastcgi или mod_fcgid Мультиплексирование запросов через одно соединение невозможно в данной архитектуре веб-сервера Apache aXesW3 Cherokee HTTP Server Hiawatha webserver Поддержка изолированного FastCGI-сервера Lighttpd LiteSpeed Web Server Microsoft IIS MyServer nginx Поддержка группы серверов OpenBSD httpd Open Market Web Server Roxen webserver Sun Java System Web Server (и предшественники) WebSTAR Yaws Zeus Kitura

Привязки FastCGI API в языках программирования FastCGI может быть использован в любом языке, поддерживающем сокеты. Существующие API: Borland Delphi/FreePascal C / C++ C# Chicken Scheme Common Lisp: CLISP and CMUCL D (язык программирования) Go Erlang Guile Scheme Goanna Eiffel Haskell HP BASIC for OpenVMS Java Lua Mono XSP Ocaml Perl PHP Python Roadsend PHP Ruby Rust SmallEiffel Smalltalk: FasTalk и Dolphin Smalltalk Tcl

Примечания

См. также CGI SCGI PCGI WSGI PHP-FPM

Источники Библиотека FastCGI (архив сайта fastcgi.com) Спецификация FastCGI Настройка FastCGI модуля для сервера nginx suPHP популярный модуль CGI для PHP

Категория:Веб-программирование