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 9000lsof -i :9000コマンドでソケットの使用状況をチェックできます。

# ソケットが正常に利用可能であることを確認
sudo netstat -anp | grep php7.4-fpm.sock

# ApacheとPHP-FPMの接続状態を監視
sudo journalctl -u apache2

注意事項

  • セキュリティ上の注意: ソケット接続を使用する際は、ソケットファイルへのアクセス権限を厳密に制御すること。
  • パフォーマンス/運用上の注意: 設定変更後にApacheやPHP-FPMの動作が正常であることを確認し、必要であればバックアップを作成。

まとめ

1. ソケット接続による通信効率化: HTTPプロトコル経由での通信を避けることで、パフォーマンスが向上します。

2. セキュリティ強化: ネットワーク上のデータ転送が不要になるため、攻撃面が減少します。

3. 設定管理の簡素化: 統合されたプロセス間通信により、設定管理やメンテナンスが楽になります。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ