nginx で PHP を動かす


背景

Nginx で PHP を動かすには、php-fpm をインストールする所までは覚えていても、その後の設定の書き方を毎回すっかり忘れているのでメモ。
モジュールのインストールは終わっている前提で、その後の設定部分だけを記述しています。

環境

  • Amazon Linux 2
  • PHP 7.2.16 (php -v)
  • nginx/1.12.2 (nginx -v)

設定

nginx 側の設定

/etc/nginx/nginx.conf を編集する必用がある。
スタンザが http → server (80と443)→ location の階層構造になっている。
server の 80 と 443 の両方に php 用の location スタンザを追加しておく(使うほうだけでも良いけど)

nginx.conf
        location ~ \.php$ {
            root           /usr/share/nginx/html; # ここは nginx の / ディレクトリにしておく。nginx の / から下の階層の全てでPHPが実効できるようになる。
            # root           /var/www;
            # fastcgi_pass   127.0.0.1:9000;  # これは php-fpm の設定に依存する。自分は使わない派。ネットの記事は使っているものが多い。
            fastcgi_pass    unix:/run/php-fpm/www.sock; # こちら派。パスの設定は、php-fpm 側の記述に unix: を付けたものになる。
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
            include        fastcgi_params;
        }

編集が完了したら再起動

sudo nginx -s reload

php-fpm 側の設定

/etc/php-fpm.d/www.conf を編集する必用がある

/etc/php-fpm.d/www.conf
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx # nginx にする
; RPM: Keep a group allowed to write in log dir.
group = nginx  # nginx にする

<省略>
; Note: This value is mandatory.
listen = /run/php-fpm/www.sock   # これを使って通信するので、この値をnginx.confで指定する。

<省略>
;                 mode is set to 0660
listen.owner = nginx  # nginx にする
listen.group = nginx  # nginx にする

編集が完了したら再起動

sudo service php-fpm restart

PHP動作確認用のいつものFile

動作確認用の phpinfo.php を作成して、nginx のルートに配置する。

この例では nginx ルートは以下なので以下のルートにテスト用 php を配置
/usr/share/nginx/html

phpinfo.php
<?php phpinfo(); ?>

nginx ルートの www.example.com/phpinfo.php にアクセスすると、おなじみの以下の画面が見えればセットアップは完了です。