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


35

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

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

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

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

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

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

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


私が見つけた最も近いものは、SOに関するこの質問です。そのウェブサイトはスタックオーバーフローではありません。
ta.speot.is

1
fastcgiのこれはかなりよく説明しています。

1
@ ta.speot.is 寛容、pleaassuhです。。ありがとう、Matt、もちろんfastcgi.comを見ましたが、それらの指示に従うのは少し難しいと感じました。
エヴァンマットソン

@ ta.speot.is、簡単なタイプミス。彼は「SE」ではなく「SE」を意味しました。
Pacerier

回答:


49

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

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

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

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

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

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を提供しています。


4
これは命の恩人です。古いApacheの手順は、Ubuntu 14.04およびApache 2.4では機能しませんでした。しかし、これは魅力のように機能しました。+100 !!
Bhavin道志

正確にこれに従いましたが、「/ php5.fcgi / indexにアクセスする権限がありません」というエラーが表示されます...そしてエラーログで、「クライアントはサーバー構成によって拒否されました:/ usr / lib / cgi-bin /php5.fcgi '...アイデアはありますか?
ちょうどラッキー本当に

それを考え出した...私は何らかの理由で古い「順序拒否、許可」構成をルートに使用していた...すべて修正されました:D
Just Lucky本当に

パッケージと設定のインストール後、次のエラーが発生しました。「apache2:/etc/apache2/apache2.confの216行目の構文エラー:/etc/apache2/conf-enabled/php5-fpm.confの9行目の構文エラー:予期されました</ Directory>しかし</ IfModule>を見た」
-Farooq


20

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

新しい注意事項:

チュートリアルでは、次のコマンドで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構成に配置する(すべての仮想ホストで有効になる)か、PHP-FPMを使用する各仮想ホストに配置できます。

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

sudo nano /etc/apache2/conf.d/php5-fpm.conf

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

Apacheを再起動します。

sudo service apache2 restart

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

sudo nano /var/www/info.php

追加:

<?php phpinfo();

保存して終了します。

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

上部のサーバーAPIの下に表示されFPM/FastCGIます。

成功!

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


これを</ IfModule>の前に追加する必要がありました:<Directory / usr / lib / cgi-bin>必要なすべての</ Directory>
Rimu Atkinson

@RimuAtkinsonは正しいです。デフォルトでは、新しいバージョンではすべてのディレクトリが禁止されているため、cgi-binディレクトリへのアクセスを明確に許可する必要があります。あなたが403買ってあげることのないように、これは、答えに追加する必要があります
johnrom

このハウツーをありがとう!Require all grantedこれはApache 2.4以降でのみ必要であることに注意してください。Apache 2.2で構成ファイルに配置すると、失敗します。
リーム14

メモを追加しました。(詳細は自由に編集してください。あなたの投稿です。))詳細については、stackoverflow.com
a / 22040167/592323

1
この回答は、ubuntu 14.04では機能しません。14.04で行うには、JDawggによる回答を参照してください。
Bhavin道志

1

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

0

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

sudo apt-get libapache2-mod-fastcgi php5-fpmのインストール先:

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 service apache2 restart && sudo service php5-fpm restart to:

sudo service apache2 restart && sudo service php5.6-fpm restart

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.