debian中的apache2.4 + php-fpm + phpmyadmin

时间:2014-04-18 21:35:51

标签: phpmyadmin debian php apache2.4

我在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文件?

&GT;&GT;更新&LT;&LT; 我在phpmyadmin apache的conf

中添加了proxypassmatch指令
ProxyPassMatch ^/phpmyadmin/(.*\.php(/.*)?)$ unix:/var/run/php5-fpm.sock|fcgi:///usr/share/phpmyadmin/

期待工作,但我一直得到同样的错误。

&gt;&gt;更新2&lt;&lt; 我用网络(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 个答案:

答案 0 :(得分:5)

我正在努力解决这个完全相同的问题,我无法让phpmyadmin工作。我仍然没有找到&#34;文件未找到&#34;上文提到的。我的问题是我必须将我的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>

答案 1 :(得分:1)

这可能是因为套接字正在supported from Apache 2.4.9并且您使用了2.4的某些早期版本吗?

答案 2 :(得分:0)

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

  1. 您的PHPMyAdmin设置为使用mod_php5,因为您通过PHP-FPM使用PHP,所以可能没有安装。
  2. 您正确地确定phpmyadmin安装程序需要一个具有PHP文件正确路径的proxypass。
  3. 对于最后一点,通常php-fpm将在TCP上侦听unix socket ,但不能同时侦听两者。 listen指令在/etc/php5/fpm/pool.d/www.conf中设置的内容是什么?是否定义了多个listen指令?

    我猜测那里只有一个Listen 127.0.0.1:9000

答案 3 :(得分: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>