Apache 与 PHP-FPM - PHP 无法执行

Apache 与 PHP-FPM - PHP 无法执行

我已经使用以下方式编译了支持 FPM 的 PHP 7本教程在CentOS 7.x环境中。

我可以通过运行 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 并且它运行成功。

现在我已经创建了 vhosts 并将域引导到目录。我粘贴了一个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)

答案1

问题解决了。我已按照以下步骤操作。

确保 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

更新 vHost 配置文件

例如,您正在托管example.com。现在打开域的 vhost 配置。这是一个最简单的示例。

<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

相关内容