![使用 Puppetlabs/Apache 在 Apache 上启用 FastCGI](https://linux22.com/image/632667/%E4%BD%BF%E7%94%A8%20Puppetlabs%2FApache%20%E5%9C%A8%20Apache%20%E4%B8%8A%E5%90%AF%E7%94%A8%20FastCGI.png)
我正在使用 Puppetlabs/Apache 来配置 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
无缝运行...但有一个缺点: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()
对 aphpinfo.php
文件的调用并检查php /path/to/phpinfo.php | less
并且Service API
仍然在cli
。
当我查看时/etc/apache2/mods-enabled
,我可以看到fastcgi.conf
。fastcgi.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 块。
当我尝试使用它来设置它(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
。它只有一个内容:一个名为的空文件夹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'
目录
答案1
首先:如果您在 shell 上执行 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
=> 检查你的虚拟主机是否有这样的指令