目次
はじめに
今回は、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