![](/img/trans.png)
[英]PhpMyAdmin, PHP7, MariaDB10, Apache2.4, Windows 10
[英]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 版本嗎?
看起來你解決了這個問題。
最后一點,通常 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.