Apache-2.2

PHP-FPM 在 Apache、CentOS 6.4 上不能作為全域 PHP 處理程序工作

  • August 27, 2013

我正在嘗試將我伺服器上的 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.conf

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”中,它們是子目錄而不是虛擬主機。我在嘗試 aceess server.com/pma 時看到錯誤:

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

在我從相同的來源編譯 mod_php 並且一切正常之前。現在它仍然在系統路徑中註冊,但是在 httpd 中載入 mod_php 被禁用。

我有<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 參數的單獨虛擬主機。

引用自:https://serverfault.com/questions/533775