Apache-2.4

Apache 與 PHP-FPM - PHP 不執行

  • December 3, 2019

我在 CentOS 7.x 環境中使用本教程編譯了支持 FPM 的 PHP 7。

我能夠通過執行通過 CLI 測試 php。

cd /opt/php7/bin
./php --version

哪個輸出

PHP 7.0.6 (cli) (built: May 22 2016 07:20:48) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
   with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

我還安裝了 apache,它執行成功。

現在我已經創建了虛擬主機並將域引導到一個目錄。我已經粘貼了一個info.php帶有該函式的 php 文件,phpinfo()但伺服器輸出 PHP 函式而不執行它。

我覺得我現在真的很接近了,只需要配置 apache 以使用 php-fpm 執行,所以我把這個配置放在httpd.conf文件中,但它沒有幫助。

<IfModule mod_fastcgi.c>

   DirectoryIndex index.html index.shtml index.cgi index.php

   AddType application/x-httpd-fastphp7 .php
   Action application/x-httpd-fastphp7 /php7-fcgi

   Alias /php7-fcgi /opt/php7/bin/php-cgi

   FastCgiExternalServer /var/www/html/ -socket /opt/php7/var/run/php-fpm.pid -pass-header Authorization

   <Directory /var/www/html/>
       Require all granted
   </Directory>
</IfModule>

fcgi 模組已安裝,因為當我執行時apachectl -t -D DUMP_MODULES我得到了fcgid_module (shared)

解決了這個問題。我已按照以下步驟操作。

確保 PHP-FPM 正在執行

首先,如果您沒有為 php-fpm 選擇任何替代埠,那麼它將被設置為在埠 9000 上執行。

/etc/init.d/php-fpm start

或者

/etc/init.d/php7.x-fpm start

如果它失敗說埠已被佔用,那麼您將需要找出埠正在執行的程序號並將其終止

netstat -tulpn | grep :8999

這應該為您提供目前正在執行的程序 ID。例如,如果程序 id 是21190那麼你執行

kill 21190

現在埠已清除,您現在可以嘗試重新php-fpm啟動

/etc/init.d/php-fpm start

更新虛擬主機配置文件

例如,您正在託管example.com. 現在打開域的虛擬主機配置。這是一個最簡單的例子。

<VirtualHost *:80>
   DocumentRoot "/var/www/html/example.com/"
   ServerName example.com
</VirtualHost>

現在添加以下更新:

<VirtualHost *:80>
   DocumentRoot "/var/www/html/example.com/"
   ServerName example.com

   # Setup php-fpm to process php files
   ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/example.com/$1
   DirectoryIndex /index.php index.php
</VirtualHost>

現在應該執行 example.com 的所有 php 文件。

參考: https ://wiki.apache.org/httpd/PHP-FPM

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