FastCGI
nginx
php-fpm

php-fpm の動作確認


概要


  • docker で nginx と php-fpm を別々のDockerコンテナで構築する際

    nginx => 9000Port => php-fpm でどうしてもアクセスできなかった

  • 9000Port はhttpプロトコルではなくfastcgiなプロトコルなので確認しづらい

  • cgi-fcgi コマンドを利用することで、レスポンスが返却されるか確認出る


install


CentOS

yum --enablerepo=epel install fcgi

ubuntu(未確認)

apt-get install libfcgi0ldbl


接続テスト


  • 確認用スクリプトの設置

echo "<?php phpinfo(); ?>" >> /var/www/html/index.php 


  • リクエスト

SCRIPT_NAME=index.php \

SCRIPT_FILENAME=/var/www/html/index.php \
REQUEST_METHOD=GET \
cgi-fcgi -bind -connect 127.0.0.1:9000


  • レスポンスが返却されれば成功!

X-Powered-By: PHP/7.2.10

Content-type: text/html; charset=UTF-8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<style type="text/css">
/*以下略*/


その他


コマンドHELP


  • UNIX domain socket も対応していそうです。

[root@ee1633ae5f0c /]# cgi-fcgi --help

Unknown option --help
Missing application pathname
Missing -connect <connName>
Usage:
cgi-fcgi -f <cmdPath> , or
cgi-fcgi -connect <connName> <appPath> [<nServers>] , or
cgi-fcgi -start -connect <connName> <appPath> [<nServers>] , or
cgi-fcgi -bind -connect <connName> ,
where <connName> is either the pathname of a UNIX domain socket
or (if -bind is given) a hostName:portNumber specification
or (if -start is given) a :portNumber specification (uses local host).


参考

https://easyengine.io/tutorials/php/directly-connect-php-fpm/