2026年5月17日
2026年5月17日
ApacheとPHP-FPMのソケット接続設定方法
はじめに
ApacheとPHP-FPM間の通信は通常、HTTPプロトコル経由で行われます。しかし、パフォーマンス向上やセキュリティ強化の目的からソケット接続を使用する方法が推奨されています。ソケット接続では、両者の通信を直接的に行うため、転送時間とネットワーク負荷が減少します。
症状・背景
このテーマが必要になる主な場面は以下の通りです:
- パフォーマンス向上: ソケット接続を使用することで、HTTPプロトコルのヘッダー処理やSSL暗号化などの手順を避けることができます。
- セキュリティ強化: ネットワーク経由でのデータ転送は不要になるため、攻撃面が減る可能性があります。
- 運用効率化: 統合されたプロセス間通信により、設定管理やメンテナンスが楽になります。
手順・設定方法
ステップ1: PHP-FPMのソケットモードを有効にする
まずはPHP-FPM側でソケット接続を使用できるように設定します。/etc/php/7.4/fpm/pool.d/www.conf(または適切なバージョンに置き換えてください)を開き、以下のように設定を行います。
# PHP-FPMのpool設定を編集
sudo nano /etc/php/7.4/fpm/pool.d/www.conf
# listen = 127.0.0.1:9000 の行を削除またはコメントアウト
# listen = /run/php/php7.4-fpm.sock
# 新しいソケット設定を追加
listen = /run/php/php7.4-fpm.sock
ステップ2: ApacheのVirtualHostファイルでソケット接続を使用する
次に、ApacheのVirtualHostファイルでPHP-FPMとの通信先をソケットに変更します。通常は/etc/apache2/sites-available/000-default.confや特定のサイトの設定ファイルです。
# ApacheのVirtualHost設定を編集
sudo nano /etc/apache2/sites-available/000-default.conf
# PHP-FPM接続先をソケットに変更
<IfModule mod_fastcgi.c>
FastCgiExternalServer /var/www/html/php-fpm -socket=/run/php/php7.4-fpm.sock -pass-header Authorization
</IfModule>
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
# 以下を追加
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock"
</FilesMatch>
ステップ3: ApacheとPHP-FPMのサービスを再起動
設定が完了したら、ApacheとPHP-FPMの両方のサービスを再起動して適用します。
# PHP-FPMサービスの再起動
sudo systemctl restart php7.4-fpm
# Apacheサービスの再起動
sudo systemctl restart apache2
ステップ4: 実践/トラブルシュート/監視
設定が完了したら、ApacheとPHP-FPM間の接続状態を確認します。netstat -anp | grep 9000やlsof -i :9000コマンドでソケットの使用状況をチェックできます。
# ソケットが正常に利用可能であることを確認
sudo netstat -anp | grep php7.4-fpm.sock
# ApacheとPHP-FPMの接続状態を監視
sudo journalctl -u apache2
注意事項
- セキュリティ上の注意: ソケット接続を使用する際は、ソケットファイルへのアクセス権限を厳密に制御すること。
- パフォーマンス/運用上の注意: 設定変更後にApacheやPHP-FPMの動作が正常であることを確認し、必要であればバックアップを作成。
まとめ
1. ソケット接続による通信効率化: HTTPプロトコル経由での通信を避けることで、パフォーマンスが向上します。
2. セキュリティ強化: ネットワーク上のデータ転送が不要になるため、攻撃面が減少します。
3. 設定管理の簡素化: 統合されたプロセス間通信により、設定管理やメンテナンスが楽になります。
関連記事: