Рубрики
Uncategorized

CGI, fastcgi и PHP

Автор оригинала: David Wong.

CGI

Что такое CGI? CGI (Общий интерфейс шлюза) является стандартным Соглашением Он обеспечивает стандартный протокол для веб-сервера, так что сервер может запускать сторонние программы, такие как программы интерфейса командной строки, которые могут динамически генерировать веб-страницы. Эти сторонние программы называются CGI-скриптами (программы, соответствующие определению CGI), или сокращенно CGIs. То, как выполняются эти CGI-программы, определяется сервером. В общем, CGI-скрипт может динамически генерировать HTML-код после получения веб-запроса.

Почему CGI Точно так же, как браузер отправит информацию о запросе на веб-сервер, веб-сервер также передаст некоторую необходимую информацию программе CGI, когда ей понадобится программа CGI. Соответственно, после запуска программы CGI ей также необходимо вернуть некоторую информацию на веб-сервер, которая включает в себя некоторый контент в HTTP, такой как статус ответа на текущий запрос, возвращаемый тип контента (например, HTML, PDF или обычный текст) и т. Д.

В течение долгого времени разные веб-серверы использовали бы разные методы для обмена информацией с программами CGI, что делает программы CGI менее универсальными (в соответствии с различными веб-серверами необходимо соответствующим образом модифицировать программы CGI). Так родился CGI. В нем определены некоторые общие методы регулирования обмена информацией между веб-сервером и программой CGI. Ранние CGI-программы в основном использовались для обработки HTML – форм.

Можно настроить соединение между веб-сервером и программой CGI На веб-сервере, URL-адреса которых должны обрабатываться программой CGI. Обычно это делается путем указания того, что некоторые каталоги сервера принадлежат программе CGI (этот каталог соответствует некоторой форме URL-адреса, например “http://example.com/ cgi -bin/pr…” этот URL-адрес соответствует каталогу CGI bin, поэтому сервер знает, что этот запрос должен быть обработан программой CGI)

Веб-сервер хранит необходимую информацию в переменных среды, а программа CGI получает необходимую информацию от переменных среды, чтобы она могла осуществлять обмен информацией между ними. После того, как программа CGI завершит обработку, информация, первоначально отправленная в “стандартный вывод”, будет передана на веб-сервер, и сервер вернет результат клиенту.

Большинство из следующих параметров заданы стандартами CGI и должны быть переданы программе CGI веб-сервером (в виде “переменной среды”, упомянутой выше).:

Server specific variables:
    Server? Software: name / version of HTTP server
    Server name: host name of the server (or IP address)
    GATEWAY_INTERFACE: CGI/version.
Request specific variables:
    SERVER_PROTOCOL: HTTP/version.
    Server? Port: TCP port
    Request method: http request method (get, post, etc.)
    Path? Info: path suffix
    Path_transferred: if path_info exists, this parameter represents the corresponding absolute path on the server.
    Script_name: the corresponding path to the program (for example, / CGI bin / script. CGI)
    Query'string: in URL The next part at the back. These request strings are usually in the form of "name = value" (for example, VAR1 = val1 & var2 = val2...)
    Remote? Host: the host name of the client
    Remote? Addr: IP address of the client.
    Auth? Type: authentication type (if available)
    Remote_user: related to auth_type
    REMOTE_IDENT: see ident, only if server performed such lookup.
    CONTENT_TYPE: Internet media type of input data if PUT or POST method are used, as provided via HTTP header.
    CONTENT_LENGTH: similarly, size of input data (decimal, in octets) if provided via HTTP header.
    Other parameters related to user agent (usually browser): http  accept, http  accept  language, http  user  agent, http  cookie

Недостатки CGI Для каждого запроса необходимо запустить программу CGI. По сравнению с обработкой одного запроса, потребление производительности процесса запуска составляет большую долю потребления всего процесса. Поэтому, если для обработки каждого запроса необходимо запускать новую программу CGI, это явно неэффективно с точки зрения производительности.

Альтернативы CGI Из-за недостатков CGI, упомянутых выше, появились следующие альтернативы:

  1. Fastcgi (предварительное поколение”prefork”);
  2. Модульная обработка, прямой запуск соответствующей программы на веб-сервере для реализации динамической генерации HTML (например, mod_ php Apache );
  3. Использование предварительно скомпилированной программы CGI (т. е. скомпилированного языка);
  4. Сервлет Javax

FastCGI и php-fpm

Что такое fastcgi Fastcgi-это вариант протокола, разработанный на основе стандартного протокола CGI. Его основная цель-снизить нагрузку на взаимодействие между веб-сервером и программой CGI, чтобы один сервер мог обрабатывать больше веб-запросов одновременно.

Детали реализации fastcgi В отличие от CGI, который запускает новую программу CGI каждый раз, когда обрабатывает запрос, fastcgi использует некоторые процессы CGI-резидентов памяти для обработки постоянного потока запросов. Этими процессами CGI управляет процесс управления fastcgi (сервер fastcgi), а не веб-сервер. При получении веб-запроса веб-сервер отправляет некоторую необходимую информацию и сам запрос страницы процессу fastcgi через доменный сокет UNIX, именованный канал или TCP-соединение (для которого процесс CGI назначается процессом управления fastcgi). При том же подключении веб-ответ возвращается на веб-сервер. После получения ответа это соединение может быть закрыто, но веб-сервер и процессы CGI, обрабатывающие запрос, будут продолжать находиться в памяти, ожидая обработки следующего запроса. Таким образом, каждый процесс CGI может обрабатывать множество веб-запросов в своем жизненном цикле, а не только один веб-запрос, как CGI.

Что такое PHP FPM Php-fpm (менеджер процессов fastcgi) – это конкретная реализация fastcgi в PHP. Начиная с php5.3.3, он был интегрирован в установочный пакет PHP.

Связь между Apache и PHP

  1. CGI (в основном не используется)
  2. Модульность (mod_php)
  3. FastCGI

Для получения конкретной конфигурации, пожалуйста, обратитесь к: https://segmentfault.com/q/10… http://php.net/manual/en/inst…

Связь между nginx и PHP

Обычно используется Fastcgi

Ссылка на конкретную конфигурацию https://segmentfault.com/a/11… http://php.net/manual/en/inst…

Ссылка

https://en.wikipedia.org/wiki… https://en.wikipedia.org/wiki… https://en.wikipedia.org/wiki… http://php.net/manual/en/inst…