apache2.4 + php-fpm + phpmyadmin в дебиане

У меня есть эта настройка в 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 - нет.


person papasj    schedule 18.04.2014    source источник
comment
Если бы я мог поцеловать тебя, я бы это сделал, чистый гений!   -  person Creek    schedule 11.12.2014
comment
Вы спасли мою жизнь! большое спасибо !   -  person Isma Haro    schedule 02.06.2016
comment
Я также пытался работать с сокетами Unix, пока не сдался. Это не сработает. Поэтому решил вернуться к TCP-соединению!   -  person David Okwii    schedule 17.06.2017


Ответы (4)


Я боролся с этой же проблемой, и я не мог заставить phpmyadmin работать. Я все еще получал «Файл не найден», упомянутый выше. Моя проблема заключалась в том, что я должен был поместить свой в свой ProxyPassMatch внутри моего файла 000-default.conf внутри моей папки ./sites-available, и мне пришлось поместить эти записи ДО записи по умолчанию. Это было указано в самом низу этой страницы, где я нашел решение: 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>
person Russell Griffith    schedule 02.10.2015

Может ли это быть связано с тем, что сокеты поддерживаются в Apache 2.4.9 а вы использовали какой-то более ранний билд 2.4 возможно?

person dzhi    schedule 05.07.2014
comment
да, это была проблема с сокетом unix, Apache поддерживает сокет unix начиная с версии 2.4.9 и выше (или с патчем для версии 2.4.7). Я использовал 2.4.7, но в то время в документации Apache не указывалось, что сокет unix не поддерживается. - person papasj; 21.07.2014

Похоже, вы решили это.

  1. Ваш PHPMyAdmin был настроен на использование mod_php5, который, вероятно, не был установлен, поскольку вы используете PHP через PHP-FPM.
  2. Вы правильно определили, что для установки phpmyadmin требуется прокси-пасс с правильным путем к файлам PHP.

Что касается последнего бита, обычно php-fpm будет прослушивать сокет unix или TCP, но не оба. Какая директива listen установлена ​​в /etc/php5/fpm/pool.d/www.conf? Определено ли более одной директивы listen?

Я предполагаю, что там установлен только один Listen 127.0.0.1:9000.

person fideloper    schedule 04.05.2014

Мне нужно было добавить 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>
person Bernard    schedule 21.01.2021