web-dev-qa-db-ja.com

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

Puppetlabs/Apacheを使用してApacheを構成しています。メインのパペットファイルで、次のように呼び出して構成します。

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.loadがわかります。モジュールの Sudo nano fastcgi.conf/loadテンプレートに由来するfastcgi.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.erb がありますvhostsテンプレートのFastCGIブロック。

Sudo a2enmod fastcgi aliasを使用してセットアップしようとすると(puppetlabs/Apache :: mod :: fastcgiがすでに実行しているはずです)、(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>

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

FastCGIを有効にして実行する方法を実際に後回しにすることはできませんが、それでもcliが実行中のモードであると読んでいますPHP。

編集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' dir にも当てはまります

4
kaiser

まず、シェルで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を確認してください

1
Kevin Häfeli