У меня есть эта настройка в 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() и каждый файл php, который я запрашиваю в /var/www/html/.
Я продолжаю установку phpmyadmin из репозитория Debian, но когда я перехожу к http://MY.IP/phpmyadmin, я получить ошибку «Файл не найден» и в журнале ошибок apache
"[proxy_fcgi:error] AH01071: Got error 'Primary script unknown\n'"
Пакет Debian phpmyadmin выгружает содержимое в /usr/share/phpmyadmin. Если я создам файл test.html в папке /usr/share/phpmyadmin, я увижу его содержимое с http://MY.IP/phpmyadmin/test.html
Проблема в том, что файлы php в каталоге /usr/share/phpmyadmin не обрабатываются. Конфигурация apache phpmyadmin такова:
# 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 для обработки файлов php в каталоге /usr/share/phpmyadmin?
>>update‹‹ Я добавил директиву proxypassmatch в phpmyadmin apache conf
ProxyPassMatch ^/phpmyadmin/(.*\.php(/.*)?)$ unix:/var/run/php5-fpm.sock|fcgi:///usr/share/phpmyadmin/
ожидая работы, но я продолжаю получать ту же ошибку.
>>update 2‹‹ Я заменил unix-сокет php-fpm на network (127.1:9000) и заменил ProxyPassmatch файла виртуального хоста на:
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$1
и в конфигурации Apache phpmyadmin:
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, я получаю phpinfo из /var/www/html/phpinfo.php, а когда я захожу на MY.IP/phpmyadmin/phpinfo.php, я получаю обработанное содержимое /usr/доля/phpmyadmin/phpinfo.php.
Моя проблема решена, но я до сих пор не понимаю, почему сетевое соединение с php-fpm работает, а сокет unix - нет.