webを検索すると、nginx.confに定義するfastcgi_passの定義がlocalhostのポート番号だったり、sockファイルだったりする。
定義を記述しているのみで理由を説明しているサイトが無い様に思われるための記述です。
nginxのCGI(phpなどの実行)の処理の流れ
nginxがcgi(phpなどの実行)のURLを受信すると、nginxではcgiの処理の機能が無いためphp-fpmプロセスに処理を依頼するが、その依頼をソケット(fcgiwrap.sockファイル)で行うか、ポート(127.0.0.1:9000)で行うかの設定である。
以下がnginx.confファイルの定義である。
location ~ \.php$ { root html; # fastcgi_pass 127.0.0.1:9000 fastcgi_pass unix:/run/php-fpm/www.sock;
/etc/php-fpm.d/www.confファイルの記述
php-fpmの設定ファイルを確認する。
以下の記述の場合、nginx.confに記述する定義はsockファイルになる。
listen = /run/php-fpm/www.sock ;listen = 127.0.0.1:9000
プロセス間のインとアウトを合わせる
データの入出力をポートで行うか、sockファイルで行うかの違いである。
当たり前であるが、入力がポートで出力がsockファイルでは絶対に通信できないため、入出力の方法を合わせる必要がある。
当たり前であるが、入力がポートで出力がsockファイルでは絶対に通信できないため、入出力の方法を合わせる必要がある。
nginx + PHP FPM + fcgiwrap
上記のタイトルのWEBサイトが存在する。
php処理がphp-fpmプロセスが行い、その他の処理(perlやpython)がfcgiwrapプロセスが処理すると思っていた。
自環境ではサーバの起動時にfcgiwrapプロセスを自動起動にしているにも関わらず、何かの理由で正しく起できていない現状がある。
サーバ起動後にfcgiwrapプロセスを起動すると正常起動する。
ただし、fcgiwrapプロセス起動していない状態で、cgi-binディレクトリ配下のperlプロセスをURLで指定すると正常に動作する(php-fpmが処理している思われる)。
利用するソケットを名を変えれば、phpとその他の処理を分ける事が出来るのかもしれないが、今の定義で動作しているのでそのままとする。
php処理がphp-fpmプロセスが行い、その他の処理(perlやpython)がfcgiwrapプロセスが処理すると思っていた。
自環境ではサーバの起動時にfcgiwrapプロセスを自動起動にしているにも関わらず、何かの理由で正しく起できていない現状がある。
サーバ起動後にfcgiwrapプロセスを起動すると正常起動する。
ただし、fcgiwrapプロセス起動していない状態で、cgi-binディレクトリ配下のperlプロセスをURLで指定すると正常に動作する(php-fpmが処理している思われる)。
利用するソケットを名を変えれば、phpとその他の処理を分ける事が出来るのかもしれないが、今の定義で動作しているのでそのままとする。