<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Php-Fpm on K-Life Hack | 韓国ハイエンド・ライフスタイルガイド</title><link>https://klifehack.com/tags/php-fpm/</link><description>Recent content in Php-Fpm on K-Life Hack | 韓国ハイエンド・ライフスタイルガイド</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Mon, 01 Jun 2026 13:49:50 +0900</lastBuildDate><atom:link href="https://klifehack.com/tags/php-fpm/index.xml" rel="self" type="application/rss+xml"/><item><title>Dockerコンテナ上のApacheからホストOSのPHP-FPMへFastCGIプロキシ経由で接続する実装</title><link>https://klifehack.com/p/docker-apache-host-php-fpm-proxy/</link><pubDate>Mon, 01 Jun 2026 13:49:50 +0900</pubDate><guid>https://klifehack.com/p/docker-apache-host-php-fpm-proxy/</guid><description>&lt;h1 id="dockerコンテナapacheとホストosphp-fpmのハイブリッド構成によるphp実行環境の構築"&gt;Dockerコンテナ(Apache)とホストOS(PHP-FPM)のハイブリッド構成によるPHP実行環境の構築
&lt;/h1&gt;&lt;h2 id="1-アーキテクチャの概要と選定理由"&gt;1. アーキテクチャの概要と選定理由
&lt;/h2&gt;&lt;p&gt;本稿では、Dockerコンテナ内で動作するApache HTTP Server（以下、Apache）と、ホストOS上で直接動作するPHP-FPM（FastCGI Process Manager）を連携させるハイブリッド構成の実装プロセスを詳述します。通常、Docker環境では同一コンテナ内、あるいはサイドカー構成でPHPを動作させることが一般的ですが、本構成ではプレゼンテーション層（Apache）とアプリケーション処理層（PHP）を物理的・論理的に分離します。&lt;/p&gt;
&lt;h3 id="11-現状の課題"&gt;1.1 現状の課題
&lt;/h3&gt;&lt;p&gt;コンテナ化されたApache（コンテナ名: &lt;b&gt;web2&lt;/b&gt;）において、静的コンテンツ（HTML）の配信は正常に行われていたものの、PHPファイルの要求に対してパースが行われず、ソースコードがそのまま露出するか、ブラウザがファイルをダウンロードしようとする事象が確認されました。これは、コンテナ内にPHPインタープリタが存在しない、あるいはApacheがPHPリクエストを適切にハンドリングできていないことに起因します。&lt;/p&gt;
&lt;h3 id="12-採用されたソリューションハイブリッドプロキシモデル"&gt;1.2 採用されたソリューション：ハイブリッド・プロキシ・モデル
&lt;/h3&gt;&lt;p&gt;以下の2つの選択肢を検討した結果、オプション2を採用しました。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;コンテナの再構築&lt;/b&gt;: ApacheとPHPを同梱した新しいイメージを作成する。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ハイブリッド・プロキシ・モデル&lt;/b&gt;: 既存のApacheコンテナとホストOS上のPHP-FPMをネットワークブリッジ経由で接続する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;オプション2の採用により、コンテナイメージの肥大化を防ぎつつ、ホストOSのネイティブなハードウェアリソースをPHP処理に活用することが可能となります。また、PHP拡張モジュールの管理や設定変更をホスト側で完結できるため、運用柔軟性が向上します。&lt;/p&gt;
&lt;h2 id="2-ホストos側の設定php-fpmの構築"&gt;2. ホストOS側の設定：PHP-FPMの構築
&lt;/h2&gt;&lt;p&gt;ホストOS側で、コンテナからのFastCGIリクエストを受け付けるための環境を整備します。&lt;/p&gt;
&lt;h3 id="21-パッケージのインストール"&gt;2.1 パッケージのインストール
&lt;/h3&gt;&lt;p&gt;ホストOSのパッケージマネージャ（dnf）を使用し、PHP本体および主要なモジュールをインストールします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dnf install -y php-fpm php-mysqlnd php-opcache php-mbstring
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;各モジュールの役割は以下の通りです：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;php-fpm&lt;/b&gt;: Webサーバーからのリクエストを処理するFastCGIマネージャ。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;php-mysqlnd&lt;/b&gt;: データベース接続用ドライバ。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;php-opcache&lt;/b&gt;: コンパイル済みバイトコードを共有メモリに保持し、実行速度を向上。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;php-mbstring&lt;/b&gt;: マルチバイト文字列（日本語等）の適切な処理に必須。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-php-fpm-設定の変更-wwwconf"&gt;2.2 PHP-FPM 設定の変更 (www.conf)
&lt;/h3&gt;&lt;p&gt;デフォルトでは、PHP-FPMはUnixドメインソケットまたは 127.0.0.1:9000 でリスンしており、外部（コンテナ）からのアクセスが拒否されます。これをネットワーク経由で受け付けるように変更します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vi /etc/php-fpm.d/www.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以下の項目を修正します：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;; 外部からのリクエストを許可するポート設定&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;listen&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;; アクセスを許可するクライアントの制限（必要に応じて調整）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;listen.allowed_clients&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;127.0.0.1, 192.168.159.10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;設定変更後、サービスを起動・有効化します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl start php-fpm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl enable php-fpm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="3-dockerコンテナ側の設定apache-fastcgiプロキシ"&gt;3. Dockerコンテナ側の設定：Apache FastCGIプロキシ
&lt;/h2&gt;&lt;p&gt;次に、Apacheコンテナ（&lt;b&gt;web2&lt;/b&gt;）がPHPリクエストをホストOSのポート8080へ転送するように設定します。&lt;/p&gt;
&lt;h3 id="31-apache設定ファイルの編集"&gt;3.1 Apache設定ファイルの編集
&lt;/h3&gt;&lt;p&gt;コンテナのシェルに入り、httpd.conf を編集します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker exec -it web2 /bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vi /usr/local/apache2/conf/httpd.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="311-プロキシモジュールの有効化"&gt;3.1.1 プロキシモジュールの有効化
&lt;/h4&gt;&lt;p&gt;以下の行のコメントアウトを解除し、FastCGIプロキシ機能を有効にします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-apache" data-lang="apache"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LoadModule proxy_module modules/mod_proxy.so
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="312-ハンドラの設定"&gt;3.1.2 ハンドラの設定
&lt;/h4&gt;&lt;p&gt;ファイルの末尾に、PHPファイルに対するプロキシ設定を追加します。ここではホストOSのIPアドレスを 192.168.159.10 と仮定します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-apache" data-lang="apache"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.159.10:8080/var/www/html/$1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この設定により、拡張子が .php のリクエストはすべて指定されたFastCGIエンドポイントへ転送されます。&lt;/p&gt;
&lt;h2 id="4-統合テストと検証"&gt;4. 統合テストと検証
&lt;/h2&gt;&lt;p&gt;設定完了後、コンテナとホスト間の通信が正常に行われるか検証します。&lt;/p&gt;
&lt;h3 id="41-検証フロー"&gt;4.1 検証フロー
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;b&gt;エントリーポイント&lt;/b&gt;: コンテナ上の index.php（HTMLフォーム）にアクセス。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;データ送信&lt;/b&gt;: フォームから POST メソッドで login.php へデータを送信。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;プロキシ処理&lt;/b&gt;: Apacheが login.php へのリクエストを検知し、ホストOSの 192.168.159.10:8080 へ転送。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;PHP実行&lt;/b&gt;: ホストOSのPHP-FPMがスクリプトを実行し、結果をApacheに返却。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;レスポンス&lt;/b&gt;: ブラウザに実行結果が表示されることを確認。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;PHPコードがそのまま表示されず、期待通りにサーバーサイドで処理された結果が返ってくれば、プロキシ連携は成功です。&lt;/p&gt;
&lt;h2 id="operational-notes"&gt;Operational Notes
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;⚠️ &lt;b&gt;ネットワークの到達性&lt;/b&gt;: コンテナからホストOSのIPアドレスに対して、ポート8080が開放されていることをファイアウォール（firewalld等）の設定で確認してください。&lt;/li&gt;
&lt;li&gt;🛠️ &lt;b&gt;ファイルパスの整合性&lt;/b&gt;: Apache側で見ているドキュメントルートと、PHP-FPM側が参照するスクリプトのパスが一致している必要があります。不一致の場合、&lt;code&gt;File not found&lt;/code&gt; エラーが発生します。&lt;/li&gt;
&lt;li&gt;💡 &lt;b&gt;パフォーマンス&lt;/b&gt;: ネットワーク経由のプロキシとなるため、高トラフィック環境ではUnixドメインソケットと比較してオーバーヘッドが発生する可能性があります。必要に応じて php-opcache のチューニングを検討してください。&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>