如何使用Apache 2.4和PHP 5.4启用FastCGI

时间:2014-05-01 16:37:11

标签: apache fastcgi php

我做了什么:

从源代码安装apache 2.4和php 5.4。

apache config:

./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=event

php config

./configure --prefix=/usr/local/php \ 
--with-mysql=mysqlnd\
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir\
--with-png-dir\
--with-zlib \
--with-libxml-dir=/usr/local/libxml2 \
--enable-xml \
--enable-sockets \
--enable-fpm \
--with-mcrypt \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--with-bz2\
--with-apxs2=/usr/local/apache/bin/apxs

在httpd.conf文件中,我启用了mod_proxy.so和mod_proxy_fcgi.so并添加了以下配置:

<IfModule proxy_module>
  ProxyRequests off
  ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/$1
</IfModule>

来自phpinfo(),我看到Server API是FPM / FastCGI

我的问题: 我将DirectoryIndex设置如下。我在DirectoryRoot中有index.html,它是“/ var / www”。当我访问localhost时,我应该看到index.html的内容。但它找不到404文件。

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

当我在上面的代码中切换index.html和php的位置时。这次html文件在php文件前面。然后,当我访问localhost时,我可以看到正确的内容。 我检查了apache错误日志。它说:

  

[Thu May 01 23:21:15.968659 2014] [proxy_fcgi:error] [pid 3415:tid 140603093 993216] [client 192.168.1.157:60384] AH01071:收到错误'主脚本unkn own \ n'

当/ var / www中只有index.php文件时,保留httpd.conf

<IfModule dir_module>    DirectoryIndex  index.html index.php</IfModule>

还有404,访问本地主机。

我的问题:

  1. 如何解决上述问题?

  2. 我对fastcgi的配置做了一些研究。比如thisthis 他们没有提到mod_proxy_fcgi,但都引用了这个

  3.   

    “FastCGIExternalServer /var/www/cgi-bin/php5.fcgi-host   127.0.0.1:9000"

    所以我不确定我是否正确使用FastCgi?这种错误的方法会导致上述问题吗?

    【P.S。】 谢谢regilero。我没有使用vhost,我检查了error.log。它似乎与php-fpm有关。浏览器中的响应页面显示“找不到文件”,而不是“404”,尽管响应代码是404.这是error.log中的内容

      

    [Thu May 01 23:21:15.968659 2014] [proxy_fcgi:error] [pid 3415:tid 140603093 993216] [client 192.168.1.157:60384] AH01071:收到错误'主要脚本未知\ n'

    我尝试将以“.php”结尾的所有请求转发给fcgi。但上面的错误看起来就像我请求index.html时,它也被转发到fcgi,fcgi无法处理它。(这是我的猜测)对于这个转发的配置,请看上面的代码,或者搜索这个“fcgi://”的页面。

    这是我的目录配置。我不确定这是否是你需要的。

    DocumentRoot "/var/www"
    <Directory "/var/www">
    Options FollowSymLinks
    AllowOverride All
    Require all granted
    </Directory>
    

1 个答案:

答案 0 :(得分:2)

这是一个相互关联的答案,但是我与很多遇到你现在遇到的问题的人分享这个答案。它似乎可以解决问题。

结帐此GIST - &gt; https://gist.github.com/diemuzi/3849349

在那里,您将找到Apache和PHP-FPM的所有工作配置。这似乎是一个更好的地方来组织我的配置,而不是将它们粘贴在这里并使其他人感到困惑。此链接不会过期,因此不必担心。

也许您也可以将我的工作示例与您拥有的内容进行比较,并找到您当前未使用的缺失内容。希望这有帮助!