要するに、私はPHPスクリプトを入手して、UNIXソケットを介してリクエストをリスンし、別のPHPスクリプトからリクエストを送信しようとしています。 私のようなPHP-FPMを設定している:PHPがUNIXソケットに耳を傾ける
[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';
効果的/var/run/php-fpm-b.sock
で待機し、nginxのは、それを指す別のPHP-FPM設定ファイルは、(このビットが正常に動作します)があり、これは/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);
}
私が得るすべては出力として「テストB」であると明らかに私は/usr/local/www/b/index.phpで間違った何かを持っています。私はソケット許可の問題だとは思わないので、エラーが出てくると思いますが、$out
はこれが動作するのは間違っていますが、PHPが何を受け取るのかは分かりません。どんな助けもありがとう。
注:FreeBSD11
NginxはPHP-FPMプロセスと通信するために 'FastCGI'プロトコルを使用します。なぜあなたは 'HTTP'経由でそれをしようとしていますか? –
Nginxを無視すると、その部分はうまく動作します。基本的には、UNIXのソケットを使用して別のクライアントに接続するPHPスクリプトと、可能であればNginxを経由せずにサーバーを接続します。 – FireLeopard
2番目のスクリプトと通信しているときに、 'FastCGI'プロトも使用する必要があるということです。 –