Nginx * WordPressの注意点【パーミッション設定合ってるのに更新できない】

一の轍

ブログをわざわざ自分のサーバを建ててまで作るということは、もちろん書きたいものがたくさんあって、構成もある程度固めていました。
それでもまず何より先に本記事を先行して書くほどに、無為な時間を過ごしてしまったという強い後悔のもと書いていきます。

ディレクトリのパーミッションは755。所有者もnginx。なぜ更新できない?

結論から。

Webサーバー(Nginx)と、PHPを実際に動かすプログラム(PHP-FPM)の実行ユーザーが一致していなかった

泥沼にハマって行った経緯は下記の通り。

意気揚々とクラウドサーバーを立ち上げ、環境を構築。WordPressのインストールも無事に完了し、すべてがうまく行くかに見えた

本業は𝑩𝒂𝒄𝒌𝒆𝒏𝒅 𝑬𝒏𝒈𝒊𝒏𝒆𝒆𝒓.
ドヤ顔でコマンドを叩き、土台を整えました。

テーマも自作したいところでしたが、如何せんUI/UXには疎いため、既存のテーマから見繕って有効化しようとアップロードを試行したところ、下記のようなエラー、サイトヘルス警告が発生しました。

「ディレクトリを作成できませんでした」
「更新時にはFTP認証情報を入力する必要があります」

Web制作者なら誰でも知っている(察しがつく)通り、こういう時の原因は十中八九ファイルのパーミッションです。すぐさまサーバーにSSHで接続し、ll (ls -l)コマンドで権限を確認。

drwxr-xr-x. 2 nginx ec2-user 6 Sep 6 15:07 uploads

所有者はnginx、グループはec2-user、パーミッションも755。Webサーバー(Nginx)が所有者なのだから、書き込めて当然のはず。何度確認しても設定に誤りは見受けられない。

ここから、数時間にわたる、なんの成果も得られなかった不毛なデバッグ作業が始まりました。

本当にファイルを書き込むのは誰?

この問題の根幹は、「Webサイトの裏側で誰が実際に動いているのか」という役割分担にありました。

飲食店に例えると、

  • Nginx: お客さんの注文を受けるホールスタッフ
  • PHP-FPM: 料理を作るキッチンスタッフ

お客さん(ブラウザ)からのリクエストは、まずホールスタッフ(Nginx)が受け取る。
しかし、ホールスタッフは料理を作るわけではなく、注文を厨房にいるキッチンスタッフ(PHP-FPM)に伝えるだけ。
WordPressのテーマインストールや画像アップロードといった実際の「作業」を行うのは、このキッチンスタッフになる。

つまり、ファイルの書き込み権限が必要なのは、ホールのnginxではなく、キッチンスタッフであるPHP-FPMの実行ユーザーです。


解決策:PHP-FPMの実行ユーザーをNginxに合わせる

多くのOS(特にAmazon LinuxやCentOSなど)でphp-fpmをインストールすると、このデフォルト名は、NginxではなくApacheを想定したapacheになっています。これをnginxに変更してあげる必要があります。

手順1. PHP-FPMの設定ファイルを確認する

PHP-FPMのプール設定ファイル(多くはwww.conf)を開きます。場所はOSによって異なりますが、主に以下のどちらかです。

  • /etc/php-fpm.d/www.conf
  • /etc/php/7.x/fpm/pool.d/www.conf (7.xはPHPのバージョン)

以下のコマンドで現在の設定を確認できます。

grep -E '^user =|^group =' /etc/php-fpm.d/www.conf

おそらく、このように表示されるはずです。

user = apache
group = apache

これが問題の根源でした。

手順2. 実行ユーザーをnginxに変更する

設定ファイルを開き、usergroupnginxに書き換えます。

; 変更前
; user = apache
; group = apache

; 変更後
user = nginx
group = nginx

手順3. サービスを再起動する

設定を保存したら、PHP-FPMとNginxの両方を再起動して設定を反映させます。

sudo systemctl restart php-fpm
sudo systemctl restart nginx

以上の設定で、PHP-FPMの実行ユーザーとディレクトリ・ファイルの所有者が一致し、無事に厨房での作業(ファイルの書き込み)ができるようになります。

まとめ

サーバーを自分で構築する際、各ソフトウェアが「誰として」動いているのかを意識するのが非常に重要です。今回の問題は、その典型例でした。

  • 問題: ファイルの所有者・権限が正しいのにWordPressがファイルを更新できない。
  • 原因: Nginxの実行ユーザー (nginx) とPHP-FPMの実行ユーザー (apache) が異なっていた。
  • 解決策: PHP-FPMの設定ファイル (www.conf) を開き、usergroupnginxに修正する。

同じ問題で時間を溶かしている未来の誰かの助けになれば幸いです。

コメント

タイトルとURLをコピーしました