mod_proxy_fcgi
モジュールmod_proxy_fcgiは新しいものであり、apacheがphpfpmなどの外部fastcgiプロセスマネージャーに接続したりリクエストを転送したりできるようにします。これにより、phpスクリプトの実行とApacheの実行を完全に分離できます。
以前は、mod_fcgidやmod_fastcgiなどのモジュールを使用する必要がありましたが、これらにはすべていくつかの制限がありました。たとえば、Mod_fcgidはphp-cgiのプロセス管理機能を適切に利用していませんでしたが、mod_fastcgiはサードパーティのモジュールです。
mod_proxy_fcgiの登場とともに Apacheはついに、外部のfastcgiプロセスマネージャーとうまく通信できるようになり、タスクをより効率的にすることができます。
phpリクエストを外部のfpmサーバーに委任すると、apacheなどのWebサーバーの負荷が大幅に軽減され、マシンリソースの効率的な利用と処理の高速化が実現します。
request page.php --> Apache --> Php FPM service --> Php process executes page.php
これらすべてに加えて、phpfpmはapcのようなオペコードキャッシングエンジンを非常に安定した方法で実行できます。
したがって、この投稿では、mod_proxy_fcgiコネクタを使用してapache+php-fpmをセットアップすることがタスクです。
1。 Apacheのインストールと構成
Ubuntu13.10にはすでにapache2.4が付属しているため、インストール可能なものはすべてリポジトリ自体にあります。
まだインストールしていない場合はApacheをインストールします
$ sudo apt-get install apache2
mod_proxy_fcgiを有効にする
$ sudo a2enmod proxy_fcgi Considering dependency proxy for proxy_fcgi: Enabling module proxy. Enabling module proxy_fcgi. To activate the new configuration, you need to run: service apache2 restart
Apacheを再起動します
$ sudo service apache2 restart
仮想ホストの構成
次のタスクは、modfcgiプロキシを使用してfpmと通信するようにvhostを構成することです。 vhost構成ファイルは次の場所に保存されます
/etc/apache2/sites-available
そこに入ると、apacheに付属の000-default.confファイルをコピーして新しいvhost構成ファイルを作成します。
$ cd /etc/apache2/sites-available $ sudo cp 000-default.conf mysite.conf $ sudo nano mysite.conf
次に、仮想ホストを構成します。これが私がファイルを設定した方法です
<VirtualHost *:80> ..... ServerName fpm.localhost ServerAdmin [email protected] DocumentRoot /var/www/mysite ..... ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ..... #Include conf-available/serve-cgi-bin.conf ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/mysite/$1 <Directory "/var/www/mysite"> Order allow,deny Allow from all AllowOverride FileInfo All # New directive needed in Apache 2.4.3: Require all granted </Directory> </VirtualHost>
注意すべき重要なことは:
1.サーバー名 -これは、仮想ホストのドメインまたはサブドメインです。この例では、fpm.localhostを使用して、ローカルホストでそのサブドメインを使用するときにphpfpmが使用されるようにしました。
2. DocumentRoot -これは、Webファイルが提供されるこの仮想ホストのルートです。
3. ProxyPassMatch -これは、「。php」ファイルに対するすべての要求を127.0.0.1:9000のfcgiサーバーに転送するように指示するディレクティブです。これは、phpfpmプロセスマネージャーが実行される場所です。これについては次のセクションで詳しく説明します。
fcgiURLには、ドキュメントルートへの正確なパスが含まれている必要があります。それ以外の場合は、ファイルを要求するときに「ファイルが見つかりません」と表示されます。
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/mysite/$1
最初のパラメーターは、一致するパターンです。したがって、「。php」の後にオプションのスラッシュなどが続くすべてのURLが一致し、一致した部分が127.0.0.1:9000で実行されているfcgiサーバーに転送されます。
4.すべての許可を要求する-ProxyPassMatch行の後に、RequireディレクティブとAllowOverrideディレクティブを含むセクションを追加しました。 Apache2.4以降で必要です
ファイルを保存し、a2ensiteコマンドを使用して有効にします。これにより、サイトが有効なディレクトリにシンボリックリンクを作成する手間が省けます。
$ sudo a2ensite mysite Enabling site mysite. To activate the new configuration, you need to run: service apache2 reload
次に、apache構成をリロードします
$ sudo service apache2 reload * Reloading web server apache2
これでapacheの構成は完了です。タスクの残りの半分は、最終的に機能するようにphpfpmを構成することです。
2。 PHP-FPM(FastCGI Process Manager)のセットアップ
次は、phpfpmを設定します。まだインストールしていない場合は、シナプス経由でインストールします。
$ sudo apt-get install php5-fpm
fpmの構成ファイルは次の場所にあります
/etc/php5/fpm
/etc/php5/fpm$ ls conf.d php-fpm.conf php.ini pool.d
pool.dディレクトリには各fpmプールの構成ファイルが含まれ、php-fpm.confがメインの構成ファイルです。私たちの唯一の作業は、Apacheまたは特定の仮想ホストで使用されるfpmプールを構成することです。
プールの構成ファイルは非常に大きく、構成できるパラメーターは多数あります。ただし、この投稿では、fpmを起動して実行するために設定する必要がある重要なフィールドについてのみ説明します
。; Start a new pool named 'www'. ; the variable $pool can we used in any directive and will be replaced by the ; pool name ('www' here) [www] ; Per pool prefix ; It only applies on the following directives: ; - 'slowlog' ; - 'listen' (unixsocket) ; - 'chroot' ; - 'chdir' ; - 'php_values' ; - 'php_admin_values' ; When not set, the global prefix (or /usr) applies instead. ; Note: This directive can also be relative to the global prefix. ; Default Value: none ;prefix = /path/to/pools/$pool ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = enlightened group = enlightened ; The address on which to accept FastCGI requests. ; Valid syntaxes are: ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on ; a specific port; ; 'port' - to listen on a TCP socket to all addresses on a ; specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. listen = 127.0.0.1:9000 ; Set listen(2) backlog. ; Default Value: 128 (-1 on FreeBSD and OpenBSD) ;listen.backlog = 128
www.confファイルをコピーして、新しい構成ファイルを作成します。次に説明するようにフィールドを編集します。
1.最初のオプションは、プールの名前です。ここでは「www」と名付けました。好きな名前を付けるか、使用するドメイン名にちなんで名前を付けます。たとえば、「yoursite」。そうすれば覚えやすくなります。
2.このプールを実行するユーザーとグループを設定します。サーバー上に複数のサイト/ドメイン/仮想ホストを設定する場合は、常に個別のユーザーアカウントと、それらごとに対応するプールを設定する必要があります。これは重要なセキュリティ対策であるため、すべてのプールが独自のユーザーの特権のみを持ちます。
3.リスニングソケットをセットアップします。これは、マスターfpmプロセスが着信要求をリッスンするソケットです。これは、unixソケットまたはtcpソケットにすることができます。ただし、mod_proxy_fcgiはまだunixソケットをサポートしていないため、tcpソケットに制限されています。
ここでは、ローカルホストのポート番号9000です。
ここでfpmを再起動します
$ sudo service php5-fpm restart
これで、新しいfpmプールが有効になります。たとえば、htopで新しいプールプロセスを確認できます。
3。セットアップをテストする
apacheとphpfpmの両方が構成およびセットアップされたので、テストします。ドキュメントのルートディレクトリに移動し、phpinfo()関数の呼び出しを含むphpファイルを作成してブラウザで開きます。
「サーバーAPI」は「FPM/FastCGI」として報告されます。
apacheとphpがセットアップされたので、APC、mariadbデータベース、phpmyadminなどの他のものをインストールすることをお勧めします。このサイトを移動して、それらのハウツーガイドを見つけてください。
リソース
詳細については、次のリンクを確認してください
https://wiki.apache.org/httpd/PHP-FPM