web-dev-qa-db-ja.com

ターミナルを介してUbuntu 12.04でPHPをFastCGIとして実行するようにApacheを構成する方法は?

私は、UNIXコマンドラインWebサーバー管理/管理の世界では比較的新しいです。

コントロールパネルの管理オプションを備えたホストの多くでは、PHPの実行方法を簡単なオプションで変更できます。

最も一般的なオプションは次のとおりです。

  • Apacheモジュール
  • CGIアプリケーション
  • FastCGIアプリケーション

私の質問は、単純に、コマンドラインを使用してこれをどのように変更しますか? Apacheには多くの設定ファイルがあります。

私が見つけた最も近いものは この質問 ですが、ディレクトリ構造は私のOS(Ubuntu 12.04)に一致しないようです。

非常に一般的であるように見えるこのプロセスの詳細を見つけることができる明確なガイドがないように思えるので、私はかなり当惑しています。これが存在する場合、私を許してください...もしそうなら、正しい方向に私を向けてください。

35
Evan Mattson

私はついに、これを行うことを目的としたニースのチュートリアルを見つけました。 LAMPスタックが既にインストールされているので、実行した手順の概要を説明しますが、完全なチュートリアルは here にあります。

新しい注意事項:

チュートリアルでは、次のコマンドでrootユーザーに切り替えます。

Sudo su

私の場合、ユーザーを切り替えるのではなく、単にこれらのコマンドの前にSudoを付けたので、その方法で手順を文書化します。

開始

ステップ1:Apache Worker MPM(マルチプロセスモジュール)をインストールする

Sudo apt-get install Apache2-mpm-worker

これは、Apacheをインストールするときのデフォルトであるインストール済みのプリフォークを置き換えます。

ステップ2:PHP5と必要なモジュールをインストールする

Sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

この時点で、「libapache2-mod-fastcgi」のインストール中にエラーが発生する場合があります。

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package libapache2-mod-fastcgi is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or is only available from another source

E: Package 'libapache2-mod-fastcgi' has no installation candidate

このパートは上記のチュートリアルにはありません

これを調整するには、multiverseリポジトリをaptソースに追加する必要があります。

これをする:

Sudo nano /etc/apt/sources.list

次の行を追加しました:

deb http://archive.ubuntu.com/ubuntu precise multiverse
deb http://archive.ubuntu.com/ubuntu precise-updates multiverse
deb http://security.ubuntu.com/ubuntu precise-security multiverse

この場合のpreciseは、私のバージョンのUbuntuを指します " Precise Pangolin "。

そこで、これらの変更を保存してターミナルに戻します。

Sudo apt-get update

そしてまた:

Sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

これで動作するはずです。

次に、これらのApacheモジュールを有効にします。

Sudo a2enmod actions fastcgi alias

apacheを再起動します

Sudo service Apache2 restart

ステップ3:Apacheの構成

ApacheをPHP-FPMで動作させるには、次の設定が必要です。

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -Host 127.0.0.1:9000 -pass-header Authorization
    <Directory /usr/lib/cgi-bin>
        Require all granted 
    </Directory>
    #directory statement mult be on multiple lines
</IfModule>

注:

古いバージョンのApache(2.3.x以前)を使用している場合は、この行を省略します

   <Directory /usr/lib/cgi-bin> Require all granted </Directory>

次のコマンドでインストール済みバージョンを確認できます

Apache2 -version

/etc/Apache2/conf.d/php5-fpm.conf(このファイルは存在しないため、作成する必要があります)のように、グローバルApache構成(すべてのvhostに対して有効)に配置するか、必要な各vhostに配置できます。 PHP-FPMを使用します。

私はグローバルルートを選択しました。

Sudo nano /etc/Apache2/conf.d/php5-fpm.conf

上記のコードブロックを貼り付けて保存し、終了します。この新しいファイルは、/etc/Apache2/conf.d/ディレクトリ内のすべてのファイルをロードするApacheのデフォルト設定によって自動的にロードされます。

apacheを再起動します。

Sudo service Apache2 restart

ここで、ドキュメントルート/var/wwwに次のPHPファイルを作成します。

Sudo nano /var/www/info.php

追加:

<?php phpinfo();

保存して終了します。

ブラウザでそのファイルを呼び出します(例:http://your-server-ip/info.php

Server APIの下に、FPM/FastCGIが表示されます。

成功!

デフォルトのTCPポートの代わりにUNIXソケットを使用するようにPHP-FPMを変更する方法や、すべての仮想ホストではなく個々の仮想ホストに対してこれを構成する方法などの詳細については、上部にあるソースチュートリアルを参照してください。

20
Evan Mattson

以前の回答に感謝し、彼らは私にほとんどの方法を教えてくれましたが、物事を機能させるには、いくつかの場所からの指示を組み合わせる必要があったため、コマンドの完全なセットを作成すると思いました。

参考までに、私はUbuntu 14.04、Apache 2.4を実行しており、デフォルトでmodphpを実行していましたが、以前の手順ではmodphpを無効にする必要もありませんでした。

また、 http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/ は非常に有益でわかりやすいことがわかりました。

ターミナルで次のコマンドを次々に実行するだけです。

最初に必要なパッケージをインストールします(これは既にインストールされていると想定しているため、php5は省略し、初回インストール時に再度追加します)。また、Apache 2.4以降では、ワーカーの代わりにevent-mpmを使用できることに注意してください http://www.vps.net/blog/2013/04/08/Apache-mpms-prefork-worker-and-event / 。私の例ではワーカーを示していますが、それを使用する場合は、Wordワーカーをイベントに置き換えてください。

Sudo apt-get install Apache2-mpm-worker

Sudo apt-get install libapache2-mod-fastcgi php5-fpm

必要なMODを有効にし、不要なMODを無効にします。

Sudo a2dismod php5 mpm_prefork

Sudo a2enmod actions fastcgi alias mpm_worker

Php5.fcgiファイルを作成し、それを使用するWebサーバーの許可を与えます。

Sudo touch /usr/lib/cgi-bin/php5.fcgi

Sudo chown -R www-data:www-data /usr/lib/cgi-bin

Php5-fpmのグローバル構成を作成します

Sudo nano /etc/Apache2/conf-available/php5-fpm.conf

以下を貼り付けます(IPアドレスの代わりにソケットを使用します)

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

Php5-fpm confを有効にします

Sudo a2enconf php5-fpm

Apacheとfpmを再起動します

Sudo service Apache2 restart && Sudo service php5-fpm restart

他の指示に従って、以下をWebサーバー上の新しい参照可能なphpファイルに貼り付けます。

<?php phpinfo();

編集したファイルをWebブラウザーで開きます。サーバーAPIの横に「FPM/FastCGI」と表示されている場合、FastCGIでPHPを提供しています!

49
JDawgg

Ubuntu 14.04では、受け入れられた回答の手順を実行した後、/ etc/Apache2/conf-available/php5-fpm.confを編集します

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
</IfModule>

次に実行する

#Sudo a2enconf php5-fpm
#Sudo Apache2 restart
1
marcanuy

誰かがUbuntu 16.04でこれを行っており、php 7からphp 5.6(Ondrej)にダウングレードした場合、いくつかの行を置き換える必要があります(JDawggの答えに基づいて):

Sudo apt-get install libapache2-mod-fastcgi php5-fpm to:

Sudo apt-get install libapache2-mod-fastcgi php5.6-fpm 

Sudo a2dismod php5 mpm_prefork:

Sudo a2dismod php5.6 mpm_prefork

Sudo nano /etc/Apache2/conf-available/php5-fpm.conf:

Sudo vim /etc/Apache2/conf-available/php5.6-fpm.conf

Php5.6-fpmのインストールプロセスで既にファイルが作成されているため、作成する必要はありません。ただし、mod_php5用であるため、そのファイルの既存のテキストはすべて削除しました。

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php/php5.6-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

ファイルがそこにあるため、パスを/var/run/php5-fpm.sockから/var/run/php/php5.6-fpm.sockに変更しました。

Sudo a2enconf php5-fpm:

Sudo a2enconf php5.6-fpm

SudoサービスApache2の再起動&& Sudoサービスphp5-fpmの再起動:

Sudo service Apache2 restart && Sudo service php5.6-fpm restart

これが私のような他の初心者に役立つことを願っています:)

0
Nazq