環境
- Apache2.4
- PHP8.0
- php-fpm
事象
curl -v http://localhost/
で構築したphpのサイトを確認しようとしたところ、503 HTTPステータスエラーを出力した。
↓
error_logを確認したら以下のMSGが出力されていた。
[Fri Mar 22 15:04:56.322375 2024] [proxy:error] [pid 44:tid 249] (13)Permission denied: AH02454: FCGI: attempt to connect to Unix domain socket /run/php-fpm/www.sock (*:80) failed
[Fri Mar 22 15:04:56.322408 2024] [proxy_fcgi:error] [pid 44:tid 249] [client 127.0.0.1:56148] AH01079: failed to make connection to backend: httpd-UDS
原因
原因は、/run/php-fpm/www.sock の読み取り、書き込み権が無かったこと。
対処
暫定
/run/php-fpm/www.sock
への読み書きができるように、オーナーとパーミッションを調整する。
オーナーは、
apacheの設定の「User」ディレクティブにかかれているユーザー。
/etc/httpd/conf/httpd.conf
などが設定ファイル。
デフォルト値は、www-dataやapacheになっているはず。
ls -l /run/php-fpm/www.sock
で確認すると、
パーミッションが644 とかになっているはずなので(なっていなければ読み書き権限を設定してね。chmod 644 /run/php-fpm/www.sockとかで)
オーナーだけ変更してあげる。
chown apache.apache /run/php-fpm/www.sock
などで。
→「apache」の部分はapacheのUserやGroupに設定してる値にしてね。
恒久対処
上記だけだと、php-fpmを再起動した際にもとに戻ってしまう。
恒久的な解決策としては、PHP-FPMの設定を変更して、ソケットファイルがapache などのユーザーとして作成されるようにする。
vim /etc/php-fpm/www.conf
user と group を探して変更する。
user = apahce
group = apahce
「apache」の部分は適宜書き換える。
php-fpm再起動してみる。(本番環境では気をつけてね)
systemctl restart php-fpm
して/run/php-fpm/www.sock のユーザーグループがapacheになってたらオッケ。
↓
だがうまくいかないかった。
↓
listen.ownerとlistten.groupをapacheの実行ユーザーにする。
listen.owner = apache
listen.group = apache
↓
/run/php-fpm/ 配下にファイルが作成されなくなった。
↓
systemctl status php-fpm
で確認すると、
Mar 22 15:41:57 860adc1bae3e php-fpm[552]: [22-Mar-2024 15:41:57] WARNING: [pool www] ACL set, listen.owner = 'apache' is ignored
Mar 22 15:41:57 860adc1bae3e php-fpm[552]: [22-Mar-2024 15:41:57] WARNING: [pool www] ACL set, listen.group = 'apache' is ignored
みたいなエラーが。
(僕がやってる環境だと、apacheの実行ユーザーを「apache」じゃない名前にしてるから発生している事象であって、デフォルトの「apache」ユーザーでapacheのユーザーを設定している場合は発生しない事象だと思われる)
↓
;;;listen.acl_users = apache,nginx コメントアウトー!
↓
systemctl restart php-fpm
rm /run/php-fpm/www.sock
↓
ブラウザアクセス。
うまくいきました。
コメント