Nginx には php-fpm(FastCGI Process Manager) を入れる必要があるようです。以下で php 8.1.2 が入りました。
$ apt install php-fpm
さて Nginx をインストールすると、/var/www/html 下が公開フォルダのデフォルトになります。
この中にサブフォルダを2つつくることにしました。
1つが開発する Web システム用(dataweb とします)、もう1つが PhpMyAdmin 用(phpmyadmin)です。
インストール直後は /etc/nginx/sites-available/default に初期設定がなされているので、これを書き換えて PHP 対応にします。
書き換え箇所を表にまとめます。
元の値 | 書き換え後 |
---|---|
root /var/www/html; | root /var/www/html/dataweb; |
index index.html index〜(以下略)〜 | index index.html index.htm index.php; |
server_name _; | server_name localhost; |
# pass PHP scripts to FastCGI server 部分 | コメントを外して有効化。但し fastcgi_pass unix:/run〜 行の php 7.4 を 8.1 に。 fastcgi_pass 127.0.0.1:9000; 行はコメントのまま。(*1) |
# deny access to .htaccess files,〜 部分 | コメントを外して有効化。(*2) |
(*1) (*2) 部分は以下のようになります。
(*1) は、拡張子 .php の URL に対して、php-fpm で処理させるための設定です。
Nginx と php-fpm 間の通信に unix socket という仕組みを利用しており、この /run/php/php8.1-fpm.sock が双方が接続する定義となります。php-fpm 側の定義は、/etc/php/8.1/fpm/pool.d/www.conf 内で同じ名前が確認できます。
(*2) は、Nginx が Apache のドキュメントルート(var/www/html)を乗っ取った場合に、Apache のアクセス制御用ファイルである .htaccess をブラウザからアクセスできることのないようにガードします。
今回は Apache をインストールしておらず、ファイルも存在していませんが、念の為対応しておくことにしました。
さて、nginx -t で設定ファイルに異常がないか確認し、OK であれば restart します。
$ nginx -t
$ systemctl restart nginx
/var/www/html/dataweb に info.php を作成し、ブラウザから http://localhost/info.php で確認します。
$ echo "<?php phpinfo() ?>" > /var/www/html/dataweb/info.php