Комментарии 18
А почему было не использовать собственно nginx, а скрипты дергать по http?
https://github.com/spiral/roadrunner не пробовал?
Какой-то странный подход.
Если нужно было прослушать обмен, то wireshark вам в руки. Возможно, он даже сам протокол декодировать сможет.
Ну и отдельно совершенно непонятно, почему php_fpm использовать можно, а поставить перед ним nginx, который будет принимать запросы и отдавать в php_fpm — нет.
Экономия памяти? Да там копейки…
Лишняя точка отказа? Тоже не факт, nginx наоборот может балансировать трафик на несколько демонов php_fpm и отрабатывать ошибки.
В этой статье основное что хотелось рассказать — это как работает протокол, и как на php можно с ним работать. Конечно врядли php лучший выбор для этого в реальном коде, но для разбора теории вполне норм.
А чем cgi-fcgi не подошла? Она вроде бы придумана специально для решения вашей проблемы.
https://www.opennet.ru/man.shtml?topic=cgi-fcgi&category=1&russian=2
Удобная штука, мы используем в частности для очистки opcache при деплое без перезапуска php-fpm.
Примерно так, может кому пригодится:
#!/bin/bash
WEBDIR="/var/local/www"
RANDOM_NAME=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13).php
sudo -u www-data mkdir -p ${WEBDIR}/opcache
sudo -u www-data touch ${WEBDIR}/opcache/${RANDOM_NAME}
echo "<?php echo \"\\t\"; if (function_exists('opcache_reset')) echo (opcache_reset() ? 'OK' : 'FAIL'); else echo 'FAIL'; ?>" > ${WEBDIR}/opcache/${RANDOM_NAME}
printf "\nTCP/IP\n\t"
sudo -u www-data bash -c "SCRIPT_NAME=/${RANDOM_NAME} SCRIPT_FILENAME=${WEBDIR}/opcache/${RANDOM_NAME} REQUEST_METHOD=GET cgi-fcgi -bind -connect 127.0.0.1:9000"
printf "\nSocket\n\t"
sudo -u www-data bash -c "SCRIPT_NAME=/${RANDOM_NAME} SCRIPT_FILENAME=${WEBDIR}/opcache/${RANDOM_NAME} REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php/php7-fpm.sock"
rm -R ${WEBDIR}/opcache
printf "\n\n"
Может быть я не прав, но почему бы не использовать AWS Lambda или Yandex Cloud Functions?
Как "разбор протокола" не плохо. Но это адский ад. Это вообще лишнее, для "дергания" скриптов.
спасибо, очень интересно.
отмечу только, что готовых fastcgi клиентов вполне достаточно https://packagist.org/?query=fastcgi
Запускаем PHP-скриптики через php-fpm без web-сервера. Или свой FastCGI-клиент (под капотом)