PHP-FPM 无法在 Apache、CentOS 6.4 上用作全局 PHP 处理程序

PHP-FPM 无法在 Apache、CentOS 6.4 上用作全局 PHP 处理程序

我正在尝试将服务器上的 PHP 处理程序从 mod_php 切换到 PHP-FPM。但我的设置有些问题。当我尝试打开 server.com/info.php 时,它被打开为显示文件内容的标准文本,而不是通过 php 解析:

<?php 

phpinfo(); 

?>

Httpd 和 php-fpm 日志未显示任何内容。httpd -M - 显示 mod_fastcgi 已加载。系统:CentOS 6.4 x64,Apache 2.2.15。

PHP-5.5.3 从源代码编译,配置如下:

./configure \
--prefix=/opt/php553-fpm \
--with-config-file-path=/opt/php553-fpm/etc \
--with-config-file-scan-dir=/opt/php553-fpm/etc/php.d \
--with-pdo-pgsql \
--with-zlib-dir \
--with-freetype-dir \
--enable-bcmath \
--enable-mbstring \
--with-libxml-dir=/usr \
--enable-soap \
--enable-calendar \
--with-curl \
--with-mcrypt \
--with-zlib \
--with-gd \
--with-pgsql \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-mysql \
--with-pdo-mysql \
--with-mysqli \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--enable-gd-native-ttf \
--with-openssl \
--with-libdir=lib64 \
--enable-ftp \
--with-imap \
--with-imap-ssl \
--with-kerberos \
--with-gettext \
--enable-fpm \
--with-fpm-user=apache \
--with-fpm-group=apache

php-fpm 进程通过 init.d/php-fpm 正常启动,并准备好监听 127.0.0.1:9000 上的连接。netstat 显示正确信息。mod_fastcgi - 通过 yum 安装

我的 httpd/fpm.conf

<IfModule mod_fastcgi.so>
    <FilesMatch \.php$>
        SetHandler php-script
    </FilesMatch>
#   AddHandler php-script .php
    Action php-script /php.external
    Alias   /php.external   /var/run/mod_fastcgi/php.fpm
    FastCGIExternalServer /var/run/mod_fastcgi/php.fpm -host 127.0.0.1:9000
    AddType application/x-httpd-fastphp5 .php
    DirectoryIndex index.php
    <Directory "/var/run/mod_fastcgi/">
        Order deny,allow
        Deny from all
        <Files "php.fpm">
            Order allow,deny
            Allow from all
        </Files>
    </Directory>
</IfModule>

fastcgi配置文件

User apache
Group apache

LoadModule fastcgi_module modules/mod_fastcgi.so

# dir for IPC socket files
FastCgiIpcDir /var/run/mod_fastcgi

# wrap all fastcgi script calls in suexec
FastCgiWrapper On

# global FastCgiConfig can be overridden by FastCgiServer options in vhost config
FastCgiConfig -idle-timeout 20 -maxClassProcesses 1

php-fpm.conf 和默认池“www”confs 与互联网上许多教程中描述的完全相同,但这次对我没有帮助(。www.conf 中只有用户和组是“apache”——在从源代码编译 PHP 时插入。

第二个问题:PHP-FPM 设置仅适用于文档根目录中的文件?

目前我的文档根目录是 /var/www/html。但是 zabbix、phpmyadmin 等几个站点位于“/home/vhosts”,它们是子目录,而不是虚拟主机。当我尝试访问 server.com/pma 时,我看到错误:

Directory index forbidden by Options directive: /home/vhosts/pma/

之前我曾从相同的源编译 mod_php,一切正常。现在它仍在系统路径中注册,但已禁用 httpd 中 mod_php 的加载。

答案1

我有<IfModule mod_fastcgi.so>,而且应该如此<IfModule mod_fastcgi.c>

另外 httpd 配置需要:SuexecUserGroup apache apache

我的 httpd fpm.conf 已在 Apache 2.2 上测试:

<IfModule mod_fastcgi.c>
    <FilesMatch \.php$>
        SetHandler php-script
    </FilesMatch>
    SuexecUserGroup apache apache
    Action php-script /php.external
    Alias   /php.external   /var/run/mod_fastcgi/php.fpm
    FastCGIExternalServer /var/run/mod_fastcgi/php.fpm -host 127.0.0.1:9000 -idle-timeout 900 -pass-header Authorization
    AddType application/x-httpd-fastphp5 .php
    DirectoryIndex index.php index.shtml index.cgi index.html index.htm
    Options +Indexes +FollowSymLinks +ExecCGI +Includes +MultiViews
    <Directory "/var/run/mod_fastcgi/">
        Order deny,allow
        Deny from all
        <Files "php.fpm">
            Order allow,deny
            Allow from all
        </Files>
    </Directory>
</IfModule>

此配置将 PHP-FPM 设置为整个服务器的全局 php 处理程序。您可以使用上述代码来更改 FPM 池和/或 SuExec 参数的单独虚拟主机。

相关内容