nginx と PHP-FPM を連携する

はじめに

今回は、Web サーバー (nginx) と PHP の処理エンジン (PHP-FPM) を組み合わせ、WordPress 等の PHPで動作するウェブアプリケーションを実行させます。そこで、 nginx と PHP-FPM を連携させるための基本的な手順をまとめていきます。

また、今回の構成は以下のとおりです。

  • Amazon Linux 2023
  • php 8.2
  • php-fpm 8.2
  • nginx 1.24

それぞれのインストール手順については、以下を参照してください。

PHP-FPM の起動と自動起動設定

PHP-FPM を起動する

サービスを起動するには sytemctl start コマンドを実行します。

# サービスを起動する
sudo systemctl start php-fpm.service

PHP-FPM の起動確認

サービスの起動を確認するには sytemctl status コマンドを実行します。

# サービスの起動確認
sudo systemctl status php-fpm.service

# 実行結果(例)
● php-fpm.service - The PHP FastCGI Process Manager
     Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; preset: disabled)
     Active: active (running) since Sun 2023-07-16 16:04:17 JST; 17min ago
<<以下省略>>

Active の行に active (running) と表示され、PHP-FPM が起動していることが確認できます。サービスが起動していない場合 inactive (dead) と表示されます。

PHP-FPM の自動起動を有効にする

システム起動時に PHP-FPM が自動的に起動するように、サービスの自動起動を有効にします。
サービスの自動起動を有効にするには systemctl enable コマンドを実行します。

# 自動起動の有効化
sudo systemctl enable php-fpm.service

# 実行結果
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.

PHP-FPM 自動起動設定の確認

サービスの自動起動設定を確認するには systemctl is-enabled コマンドを実行します。

# 自動起動有効化の確認
sudo systemctl is-enabled php-fpm.service

# 実行結果
enabled

enabled と表示され、PHP-FPM の自動起動設定が有効になっていることが確認できます。自動起動設定が無効になっている場合 disabled が表示されます。

設定ファイルの修正

PHP-FPM 設定ファイルの修正

PHP-FPMの設定ファイルを修正します。以下は、PHP-FPM の設定ファイルの修正例です。

# エディタを起動して設定ファイルを開く
sudo vi /etc/php-fpm.d/www.conf

# 以下を修正
<<省略>>
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
<<省略>>
 Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
<<省略>>

nginx 設定ファイル php.conf の確認

nginx は PHP-FPM と通信するために FastCGI を使用します。以下は、nginx の設定ファイルの修正例です。

# エディタを起動して設定ファイルを表示する
sudo vi /etc/nginx/default.d/php.conf

表示(例)

# pass the PHP scripts to FastCGI server
#
# See conf.d/php-fpm.conf for socket configuration
#
index index.php index.html index.htm;

location ~ \.(php|phar)(/.*)?$ {
    fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;

    fastcgi_intercept_errors on;
    fastcgi_index  index.php;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO $fastcgi_path_info;
    fastcgi_pass   php-fpm;
}

この例では php.conf が存在し PHP スクリプトを FastCGI サーバーに渡す記述がされていることを確認できます。

WordPress 用設定ファイルの作成

WordPress 用の設定ファイルを /etc/nginx/default.d/ 配下に作成します。

# エディタを起動して設定ファイルを開く
sudo vi /etc/nginx/default.d/wp.conf

設定ファイル(例)

index index.php;
error_page 404 /index.php?error=404;

# 一般的な制限
location = /favicon.ico {
    log_not_found off;
    access_log off;
}

location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}
# デフォルト以外のパーマリンク使用
location / {
    try_files $uri $uri/ /index.php?$args;
}

# 画像ファイル等をキャッシュする (30日)
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
     expires 30d;
     log_not_found off;
}

# アップロードサイズを変更する (256M)
# php.ini も合わせて修正
client_max_body_size 256M;

サービスの再起動

nginx と PHP-FPM サービスを再起動し、修正内容を反映します。サービスを再起動するには、systemctl restart コマンドを実行します。

# nginx の再起動
sudo systemctl restart nginx.service

# PHP-FPM の再起動 
sudo systemctl restart php-fpm.service

投稿日

カテゴリー:

, ,

投稿者: