Puppetlabs/Apache を使用して Apache で FastCGI を有効にする

Puppetlabs/Apache を使用して Apache で FastCGI を有効にする

私は Apache を設定するために Puppetlabs/Apache を使用しています。メインの puppet ファイルで、これを呼び出して設定します。

class { '::apache': }
class { '::apache::mod::fastcgi': }
apache::vhost { "${::fqdn} non-ssl":
    servername      => $::fqdn,
    port            => '2222',
    docroot         => "/var/www/${root}",
    priority        => 10,
}

マニフェストapache::mod::fastcgiはシームレスに動作しますが、欠点が 1 つあります。PHP はどういうわけか、引き続き(cli)モードで実行されます。

vagrant@wp:/etc/apache2/mods-enabled$ php -v
PHP 5.5.12-1+deb.sury.org~precise+1 (cli) (built: May  8 2014 21:04:38)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
    with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

それを確認するために、phpinfo()ファイルに呼び出しを追加してphpinfo.php確認しましたがphp /path/to/phpinfo.php | lessService APIまだ ですcli

を覗くと、とが/etc/apache2/mods-enabled見えます。内容を確認しました。fastcgi.conffastcgi.loadsudo nano fastcgi.conf/loadfastcgi.conf.erbモジュールからのテンプレート:

# ===> fastcgi.conf
# The Fastcgi Apache module configuration file is being
# managed by Puppet and changes will be overwritten.
<IfModule mod_fastcgi.c>
  AddHandler fastcgi-script .fcgi
  FastCgiIpcDir "/var/lib/apache2/fastcgi"
</IfModule>

# ===> fastcgi.load
adModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so

注:vhosts.erbテンプレートまた、サブテンプレート_fastcgi.erbvhosts テンプレートの FastCGI ブロックを構築します。

これを設定しようとすると (puppetlabs/apache::mod::fastcgi ですでに設定されているはずです) sudo a2enmod fastcgi alias、次の応答が返されます (CLI 上)。

Module fastcgi already enabled
Module alias already enabled

/etc/apache2/sites-enabledで内容を確認するとsudo nano 15-default.conf、次のようになります。

<VirtualHost *:80>
  # ...

  ## Script alias directives
  ScriptAlias /cgi-bin/ "/usr/lib/cgi-bin"
</VirtualHost>

root次に、を使用して /main ユーザーに切り替えsudo su、ファイルで参照されているディレクトリを確認しましたfastcgi.conf: /var/lib/apache2/fastcgi。そこには という名前の空のフォルダという 1 つのコンテンツしかありませんdynamic。これが問題の原因でしょうか: 空の FastCGI ライブラリ?

FastCGI を有効にして実行する方法がよくわかりませんが、それでもcliPHP を実行しているモードであると読みました。

編集1

php-fpm実行中かどうか確認しました:

vagrant@wp:/etc/apache2/conf.d$ ps -ef | grep php-fpm
root       935     1  0 15:58 ?        00:00:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
www-data   982   935  0 15:58 ?        00:00:00 php-fpm: pool www
www-data   983   935  0 15:58 ?        00:00:00 php-fpm: pool www
vagrant   2760  2605  0 19:40 pts/2    00:00:00 grep --color=auto php-fpm

php5-fpm手動でサービスを再起動しましたapache2が、結果は同じでした

sudo service php5-fpm restart
sudo service apache2 restart
php -v
# still: (cli)

何が欠けているかがわかれば、httpd.conf.erbテンプレートを手動で書き直すか、欠けている部分だけを取り込んでデフォルトのpuppetlabs/apacheテンプレートを使うことができます。これはモジュールのオプションです同じことが'/etc/apache2/mods-available'または'/etc/apache2/sites-available'ディレクトリ

答え1

まず、シェルで php -v を実行すると、常に CLI バージョンが取得されます。これは、コマンド ライン インターフェイスを使用しているためです...

php-fpm モジュールはどのようにインストールしましたか? どのモードを使用しましたか? (tcp または sock?) vhost はすでに構成しましたか? => デフォルトのものではありません - sites-enabled ディレクトリを確認してください。$fqdn のファイルがあるはずです ($fqdn は example.com のような完全修飾ドメイン名を意味します)

apache 2.4 と mod_proxy_fcgi を使用すると、vhost 設定を介して .php リクエストを FPM プールに簡単に渡すことができます。

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/path/to/your/documentroot/$1

=> そのような指示があるかどうか、vhostを確認してください

関連情報