簡體   English   中英

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

[英]apache2.4 + php-fpm + phpmyadmin in debian

我在 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

一切正常...... /usr/share/phpmyadmin/phpinfo.php。

我的問題解決了,但我仍然不明白為什么與 php-fpm 的網絡連接有效,而 unix 套接字卻沒有。

我正在努力解決這個完全相同的問題,我無法讓 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>

這可能是因為Apache 2.4.9 支持套接字並且您可能使用了一些早期的 2.4 版本嗎?

看起來你解決了這個問題。

  1. 您的 PHPMyAdmin 被設置為使用 mod_php5,它可能沒有安裝,因為您是通過 PHP-FPM 使用 PHP。
  2. 您正確地確定了 phpmyadmin 設置需要具有正確的 PHP 文件路徑的 proxypass。

最后一點,通常 php-fpm 會在 unix 套接字TCP 上偵聽,但不會同時偵聽兩者。 /etc/php5/fpm/pool.d/www.conf設置的listen指令是什么? 是否定義了多個listen指令?

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

我需要將 HTTP2 添加到 apache HTTPD 並且它停止了 phpmyadmin 的工作,因為必須刪除 mod_php。

打開/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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM