メインコンテンツに移動

ユーザーアカウントメニュー

  • ログイン
ホーム
くさのまの部屋

メインナビゲーション

  • ホーム

パンくず

  1. ホーム

nginxで定義するfastcgi_passについて

By 匿名 (未認証ユーザー) on 2024/03/31(日) - 19:47

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ファイルを定義している。

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ファイルでは絶対に通信できないため、入出力の方法を合わせる必要がある。  

fcgiwrap

perlやpythonなどがfcgiwrapプロセスが処理するため、nginxの定義とfcgiwrapの定義をあわせる必要が有る。 nginxの定義: location ~ \.(pl|sh|py|cgi)$ { fastcgi_pass unix:/run/fcgiwrap.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }

 

fcgiwrapの定義: # cat /etc/sysconfig/fcgiwrap : FCGI_PID=/var/run/spawn-fcgi.pid FCGI_SOCKET=/var/run/fcgiwrap.sock : #

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

root定義とalias定義のnginx定義

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

loactiont定義のURLにアクセスされたら、alias定義のパスがデフォルトのパスとなる。
phpで記述したシェルを処理するためphp-fpmにアクセスする場合、以下の設定例がWEBに存在した。実際正常にアクセスできた。

# cat cakephp.conf location /cakephp/ { alias /usr/local/cakephp/webroot/; index index.php; location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } #

 

アクセスがエラーとなる

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

# cat /var/log/nginx/error.log : FastCGI sent in stderr: "PHP message: PHP Fatal error: Cannot use 'Object' as class name as it is reserved in /var/www/abc.hogehoge.jp/matcha-sns-1.3.9/cake/libs/object.php on line 33" while reading response header from upstream : #

 

alias定義の時の設定

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

# cat cakephp.conf location /cakephp/ { alias /usr/local/cakephp/webroot/; index index.php; location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/run/php-fpm/www.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; } } #

 

まとめ

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

root定義ではSCRIPT_FILENAMEの記述が、root定義のパス配下のURLに存在するため以下の記述になる。
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 
alias定義ではSCRIPT_FILENAMEの記述が、alias定義のパス配下URLに存在するため、$document_root変数を利用するとCGIのパスは不正になる。
よって、以下の記述となる。
fastcgi_param SCRIPT_FILENAME $request_filename;

タグ
alias
FastCGI sent in stderr
fastcgi_pass
fcgiwrap
nginx.conf
  • コメントを投稿するにはログインまたは登録をしてください

Legal

  • コンタクト
Clear keys input element