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, упомянутых выше, появились следующие альтернативы:
- Fastcgi (предварительное поколение”prefork”);
- Модульная обработка, прямой запуск соответствующей программы на веб-сервере для реализации динамической генерации HTML (например, mod_ php Apache );
- Использование предварительно скомпилированной программы CGI (т. е. скомпилированного языка);
- Сервлет 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
- CGI (в основном не используется)
- Модульность (mod_php)
- 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…