Рубрики
Uncategorized

Понимание CGI быстрый CGI PHP FPM

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

CGI

CGI, Common Gateway Interface, is a tool for HTTP server to contact with programs on other servers, which can be used into any languages with standard input, standard output and environmental variables, such as PHP, Perl, or Tcl.

FastCGI

FastCGI is a kind of CGI which is long-live, which will always be running. With FastCGI, it'll take less time t fork(which is a problem of fork-and-execute mode in CGI). In additional, FastCGI also supports for distributed computing.
It is also not language related, which is an opened extension of CGI, which is used to keep CGI running in the memory. It's well-known that loading of CGI has been the main reason of low performance.
the main process of running FastCGI:
Loading the Process Manager of FastCGI when a Web server has booted(IIS ISAPI or Apache Module)
The Process Manager of FastCGI will initiate itself to create several CGI processes, which are used to wait for connection of Web servers.
When requests from clients have reached the Web server, the Process Manager of FastCGI will select a CGI set up before to connect, whose environmental variables and standard input will be sent to the sub process php-cgi of FastCGI.
This sub process will return standard output and error info to the Web server with the same connection. Requests will be finished when it closes the connection.
Therefore, FastCGI only set once for parsing php.ini, loading extensions and initiating all the data structures.

кратчайший путь

Because of multi-processes, FastCGI will cost more memory than CGI, whose each process(PHP-CGI) will cost about 7Mb to 25Mb memory.
Data from the article: Nginx 0.8x + PHP 5.2.13(FastCGI) is 10 times better than Apache(Edition 6)
when 30k connection happens in parallel, 10 Nginx processes will only cost 150Mb Mem(15Mb 10), and 64 PHP-CGI will only cost about 1280Mb(20Mb 64).

PHP-CGI

PHP-CGI is one kind of the Process Manager of FastCGI, which is within php itself.
The command to boot is as follow:
php-cgi -b 127.0.0.1:9000
shortcuts

После изменения php.ini вам следует перезагрузить PHP-CGI, чтобы новый php.ini заработал. Когда процесс PHP-CGI будет уничтожен, весь PHP-код не сможет работать.(PHP-FPM и Spawn-FCGI не имеют одной и той же проблемы)

PHP-FPM

PHP-FPM is another kind of the Process Manager of FastCGI, which can be downloaded here.
It's actually a patch for PHP, which is used to integrate the Process Manager of FastCGI into PHP, which should be make into PHP before version 5.3.2.
PHP-FPM can be used to control sub processes of PHP-CGI:
/usr/local/php/sbin/php-fpm [options]

# параметры –запуск: запуск процесса php fastcgi –остановка: принудительное завершение процесса php fastcgi –выход: плавное завершение процесса php fastcgi –перезапуск: перезапуск процесса php fastcgi –перезагрузка: плавная перезагрузка php.ini –регистрация: снова включите файлы журналов

Spawn-FCGI Spawn-FCGI-это общий вид менеджера процессов FastCGI, который является одной из частей lighttpd.

Прежде всего, что делает CGI? CGI должен гарантировать, что данные, передаваемые веб-сервером, являются стандартными и удобными для компилятора программы CGI.

Веб-сервер (например, nginx ) является всего лишь распространителем контента. Например, если вы запросите/index.html, затем веб-сервер найдет файл в файловой системе и отправит его в браузер, где будут распространяться статические данные. Хорошо, если текущий запрос является index.php, согласно файлу конфигурации, nginx знает, что это не статический файл, и ему нужно найти PHP-парсер для его обработки, затем он просто обработает запрос и передаст его PHP-парсеру. Какие данные nginx отправит в PHP-анализатор? URL, строка запроса, данные post, http Ну, CGI-это протокол, который определяет, какие данные передавать и в каком формате передавать в тыл для обработки этого запроса. Подумайте о том, откуда берутся пользователи, которых вы используете в своем PHP-коде. Когда веб-сервер получает/index.php После этого запроса будет запущена соответствующая CGI-программа, которая является PHP-анализатором. Затем анализатор PHP проанализирует файл php.ini, инициализирует среду выполнения, обработает запрос, вернет обработанный результат в формате, указанном CGI, и завершит процесс. Веб-сервер затем возвращает результат в браузер.

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

Чтобы повысить производительность, каковы проблемы с производительностью программ CGI? “Анализатор PHP проанализирует файл php.ini и инициализирует среду выполнения”, вот и все. Стандартный CGI выполнит эти действия для каждого файла запроса (не слишком устал! Начинать процесс очень утомительно , поэтому обработка каждого запроса занимает много времени. Это явно неразумно! Так что же делает fastcgi? Сначала fastcgi запустит мастер, проанализирует среду конфигурации, инициализирует среду выполнения, а затем запустит несколько рабочих. Когда приходит запрос, мастер передает его работнику, а затем немедленно принимает следующий запрос. Таким образом, избегается повторный труд, а эффективность, естественно, высока. Кроме того, когда рабочего недостаточно, мастер может запустить несколько рабочих заранее в соответствии с конфигурацией и подождать; конечно, когда слишком много незанятых рабочих, они также остановят некоторых, что повышает производительность и экономит ресурсы. Это управление процессами fastcgi.

Так что же такое php-fpm? Это программа, реализующая fastcgi, которая официально принята PHP.

Как вы все знаете, интерпретатором PHP является PHP CGI. PHP CGI-это просто CGI-программа. Он может только анализировать запросы и возвращать результаты самостоятельно, без управления процессами (император, я действительно не могу этого сделать!) Таким образом, существуют некоторые программы, которые могут планировать процессы PHP CGI, такие как spawn fcgi, отделенные от lighthttpd. Ну, PHP FPM-это тоже такая вещь. После долгого времени разработки он постепенно был признан всеми (вы знаете, в последние несколько лет люди жаловались на плохую стабильность PHP FPM), и он становится все более популярным.

Что ж, наконец-то я отвечу на ваш вопрос. Некоторые люди в Интернете говорят, что fastcgi-это протокол, который реализован PHP FPM.

Да

Некоторые говорят, что PHP FPM является менеджером процесса fastcgi, который используется для управления процессом fastcgi

Да. Объектом управления PHP FPM является PHP CGI. Но мы не можем сказать, что PHP FPM является менеджером процесса fastcgi, потому что мы сказали, что fastcgi-это протокол, похоже, что такого процесса нет, даже если есть PHP FPM, он не может им управлять (по крайней мере, в настоящее время).

Некоторые говорят, что PHP FPM-это патч ядра PHP

Раньше это было правильно. Поскольку PHP FPM не был включен в ядро PHP в начале, чтобы использовать эту функцию, вам нужно найти тот же PHP FPM, что и исходная версия, чтобы исправить ядро, а затем скомпилировать. Позже ядро PHP интегрировало PHP FPM, что намного удобнее. Вы можете использовать параметр — включить компиляцию FPM.

Некоторые говорят, что после изменения файла конфигурации php.ini невозможно плавно перезапустить, поэтому Родился PHP FPM

Да, после изменения php.ini процесс PHP CGI не может быть плавно перезапущен. Механизм обработки PHP FPM заключается в том, что новый работник использует новую конфигурацию, а существующий работник может отдохнуть после выполнения текущей работы, чтобы сгладить переход.

Более того, PHP CGI-это менеджер fastcgi PHP, так зачем создавать PHP FPM неправильно. PHP CGI-это просто программа для интерпретации PHP-скриптов.

Как сделать так, чтобы PHP лучше поддерживал PHP FPM

PHP FPM обеспечивает лучший способ управления процессами PHP, может эффективно управлять памятью и процессом, а также может плавно перегружать конфигурацию PHP. Когда./настройка, PHP FPM можно включить с помощью параметра – включить FPM. Изменение файла конфигурации nginx поддерживает PHP FPM

После установки nginx измените файл конфигурации nginx на nginx.conf В разделе сервер, добавьте следующую конфигурацию, в противном случае входной файл не указан. Ошибка передачи PHP-скриптов на сервер fastcgi, прослушивающий 127.0.0.1:9000 появится

location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Запустите PHP FPM и nginx

/usr/local/php/sbin/php-fpm

Режим запуска ручного исправления

/usr/local/php/sbin/php-fpm start

sudo /usr/local/nginx/nginx

Оригинал: “https://developpaper.com/understanding-of-cgi-fast-cgi-php-fpm/”