nginxで定義するfastcgi_passについて

Linux

webを検索すると、nginx.confに定義するfastcgi_passの定義がlocalhostのポート番号だったり、sockファイルだったりする。
定義を記述しているのみで理由を説明しているサイトが無い様に思われるための記述です。

nginxのCGI(phpなどの実行)の処理の流れ

nginxがcgi(phpなどの実行)のURLを受信すると、nginxではcgiの処理の機能が無いためnginxに定義されたfastcgi_passに定義された方法でphp-fpmプロセスに処理を依頼する。この依頼をソケット(sockファイル)で行うか、ポート(127.0.0.1:9000)で行うかの設定である。
以下がnginx.confファイルの定義で、sockファイルを定義している。

 

/etc/php-fpm.d/www.confファイルの記述

php-fpmの設定ファイルを確認する。
以下の記述の場合、nginx.confに記述する定義はsockファイルになる。

 

プロセス間のインとアウトを合わせる

データの入出力をポートで行うか、sockファイルで行うかの違いである。
当たり前であるが、入力がポートで出力がsockファイルでは絶対に通信できないため、入出力の方法を合わせる必要がある。
 

fcgiwrap

perlやpythonなどがfcgiwrapプロセスが処理するため、nginxの定義とfcgiwrapの定義をあわせる必要が有る。
nginxの定義:

 

fcgiwrapの定義:
/var/runディレクトリは/runディレクトリのシンボリック・リンクのため違っていても問題はない。

root定義とalias定義のnginx定義

phpシェルを処理するnginx定義

通常loactiont定義とroot定義はディレクトリ定義がリンクしていると思われる。
よって、phpで記述したシェルを処理するためphp-fpmにアクセスすつ場合、以下の以下の設定する。

 

アクセスがエラーとなる

定義を熟知したいないため、エラーのが発生した。
理由が不明である。

 

alias定義の時の設定

WEBでいろいろ調べたら、違う設定の方法があることが判明した。ただし、alias設定専用化は不明であるが記述して動作を確認すると動作した。

 

まとめ

2つのプロセス(nginxと php-fpmやfcgiwrap)の同期をとるため、定義を合わせることは当たり前である。
また、root定義の場合とalias定義のパラメータ設定が違うとは思わなかった。
すべてのCGI定義の設定をalias定義のパラメータ設定にすることは確認していない。