Короче говоря, я пытаюсь заставить PHP-скрипт прослушивать запросы через сокеты Unix и отправлять ему запрос из другого PHP-скрипта.
Я настроил PHP-FPM так:
[a]
; Unix user/group of processes
user = www
group = www
listen = /var/run/php-fpm-a.sock
;listen.backlog = -1
listen.owner = www
listen.group = www
listen.mode = 0660
; Choose how the process manager will control the number of child processes.
pm = dynamic
pm.max_children = 75
pm.start_servers = 3
pm.min_spare_servers = 1
pm.max_spare_servers = 5
pm.max_requests = 500
; host-specific php ini settings here
php_admin_value[open_basedir] = /usr/local/www/a
php_flag[display_errors] = on
/usr/local/www/a contains the following index.php:
<?php
echo 'test\ntest\ntest\n';
Существует другой конфигурационный файл PHP-FPM, который эффективно прослушивает /var/run/php-fpm-b.sock
и Nginx указывает на это (этот бит работает нормально), он содержит следующий код в /usr/local/www/b/index.php
:
echo 'TEST B';
$fp = fsockopen('unix:///var/run/php-fpm-a.sock', -1, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /index.php HTTP/1.1\r\n";
$out .= "Host: localhost\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
Очевидно, у меня что-то не так в /usr/local/www/b/index.php, так как все, что я получаю, это «TEST B» в качестве вывода. Я не думаю, что это проблема с разрешением сокета, как это было бы указано с ошибкой, я думаю, $out
это неправильно для того, чтобы это работало, но понятия не имею, что PHP получает за исключением. Любая помощь будет оценена.
Примечание: использование PHP7 на FreeBSD11
PHP-FPM менеджер процессов FastCGI FastCGI а также HTTP два разных протокола. Итак, PHP-FPM не могу говорить по HTTP непосредственно.
browser -> (HTTP) -> nginx -> (FastCGI) -> PHP-FPM + scriptB
scriptB -> (HTTP) -> PHP-FPM + scriptA
У вас есть два варианта:
script A
за nginx, а затем откройте сокет TCP вместо сокета unix для связи от B к A.script B
говорить в FastCGI
язык с script A
вместо HTTP
,Других решений пока нет …