我在 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 套接字却没有。