10

我在 debian 中有这个设置:apache 2.4 proxy_fcgi 和 php-fpm (v5.5)。在我的虚拟主机文件中,我有:

<VirtualHost *:80>
DocumentRoot /var/www/html
ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/var/run/php5-fpm.sock|fcgi://./var/www/html
CustomLog ${APACHE_LOG_DIR}/access.log combined
ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>

一切正常,我可以看到 phpinfo() 和我在 /var/www/html/ 下请求的每个 php 文件。

我继续从 debian repo 安装 phpmyadmin,但是当我浏览到http://MY.IP/phpmyadmin时,我收到“找不到文件”错误并在 apache 错误日志中

"[proxy_fcgi:error] AH01071: Got error 'Primary script unknown\n'"

Debian phpmyadmin 软件包将内容转储到 /usr/share/phpmyadmin。如果我在 /usr/share/phpmyadmin 下创建一个 test.html 文件,我可以从http://MY.IP/phpmyadmin/test.html看到它的内容

问题是 /usr/share/phpmyadmin 下的 php 文件没有被处理。phpmyadmin apache 配置是这样的:

# phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
        Options FollowSymLinks
        DirectoryIndex index.php

        <IfModule mod_php5.c>
                AddType application/x-httpd-php .php
                <FilesMatch ".+\.php$">
                    SetHandler application/x-httpd-php
                </FilesMatch>

                php_flag magic_quotes_gpc Off
                php_flag track_vars On
                php_flag register_globals Off
                php_admin_flag allow_url_fopen Off
                php_value include_path .
                php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
                php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/
        </IfModule>

</Directory>
...

并加载到 apache 配置文件中。

由于没有安装 mod_php,因此没有对 php 文件进行处理。我如何告诉 apache 使用 proxy_fcgi 来处理 /usr/share/phpmyadmin 目录下的 php 文件?

>>update<< 我在 phpmyadmin apache 的 conf 中添加了一个 proxypassmatch 指令

ProxyPassMatch ^/phpmyadmin/(.*\.php(/.*)?)$ unix:/var/run/php5-fpm.sock|fcgi:///usr/share/phpmyadmin/

期待工作,但我不断收到同样的错误。

>>update 2<< 我用网络(127.1:9000)替换了 php-fpm unix 套接字,并将 virthualhost 文件的 ProxyPassmatch 替换为:

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$1

在 phpmyadmin 的 apache conf 中:

ProxyPassMatch ^/phpmyadmin/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/usr/share/phpmyadmin/$1
ProxyPassMatch ^/phpmyadmin/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/usr/share/phpmyadmin$1index.php

一切正常.. 当我去 MY.IP/phpinfo.php 我从 /var/www/html/phpinfo.php 获取 phpinfo 并且当我访问 MY.IP/phpmyadmin/phpinfo.php 我得到处理后的内容/usr/share/phpmyadmin/phpinfo.php。

我的问题已解决,但我仍然不明白为什么与 php-fpm 的网络连接有效,但 unix 套接字却没有。

4

4 回答 4

5

我一直在努力解决这个完全相同的问题,我无法让 phpmyadmin 工作。我仍然收到上面提到的“找不到文件”。我的问题是我必须将我的 ProxyPassMatch 放在我的 ./sites-available 文件夹内的 000-default.conf 文件中,并且我必须将这些条目放在我的默认条目之前。这是本页最底部的大纲,我在其中找到了解决方案:http: //jordanconway.com/set-up-apache-2-4-with-php-fpm-on-ubuntu-13-10/

这是我的设置方式以供参考。

<VirtualHost *:80>
   ...
    DocumentRoot /var/www/html
   ...
    ProxyPassMatch ^/phpmyadmin/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/usr/share/phpmyadmin/$1
    ProxyPassMatch ^/phpmyadmin/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/usr/share/phpmyadmin$1index.php
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$1
</VirtualHost>
于 2015-10-02T16:28:50.683 回答
1

这可能是因为Apache 2.4.9 支持套接字并且您使用了一些早期版本的 2.4 吗?

于 2014-07-05T14:40:58.703 回答
0

看起来你解决了这个问题。

  1. 您的 PHPMyAdmin 设置为使用 mod_php5,由于您通过 PHP-FPM 使用 PHP,因此可能没有安装它。
  2. 您正确地确定了 phpmyadmin 设置需要一个代理密码,该代理密码具有正确的 PHP 文件路径。

最后一点,通常 php-fpm 会监听 unix 套接字TCP,但不会同时监听两者。listen指令设置在什么/etc/php5/fpm/pool.d/www.conf?是否定义了多个listen指令?

我猜那里只有Listen 127.0.0.1:9000一套。

于 2014-05-04T20:59:12.287 回答
0

我需要将 HTTP2 添加到 apache HTTPD 并且由于必须删除 mod_php 而导致 phpmyadmin 停止工作。

打开 /etc/phpmyadmin/apache.conf

注释掉

<IfModule mod_php7.c>

加入<目录

<FilesMatch \.php> # Apache 2.4.10+ can proxy to unix socket
    SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost/"
</FilesMatch>
于 2021-01-21T18:23:03.540 回答