2014-04-18 3 views
8

Ich habe diese Einrichtung in einem Debian: Apache 2.4 proxy_fcgi und php-fpm (v5.5). In meiner Virtualhost-Datei i:apache2.4 + php-fpm + phpmyadmin in debian

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

und alles funktioniert, kann ich sehen phpinfo() und jede PHP-Datei i unter/var anfordern/www/html /.

ich weiterhin mit der phpMyAdmin-Installation von der debian-Repo, aber wenn ich auf http://MY.IP/phpmyadmin zu sehen bekomme ich einen „Datei nicht gefunden“ Fehler und in dem Apache-Fehlerprotokoll

"[proxy_fcgi:error] AH01071: Got error 'Primary script unknown\n'" 

Debian phpMyAdmin Paket-Dumps den Inhalts in/usr/teilen/phpmyadmin. Wenn ich eine test.html Datei unter/usr/share/phpmyadmin erstelle ich kann seinen Inhalt von http://MY.IP/phpmyadmin/test.html

Das Problem ist, dass PHP-Dateien unter/usr/share/phpmyadmin nicht verarbeitet werden. Die phpmyadmin apache-Konfiguration lautet wie folgt:

# 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> 
... 

und in der Apache-Konfigurationsdatei geladen wird.

Da keine mod_php installiert ist, gibt es keine Verarbeitung für die PHP-Dateien. Wie kann ich Apache sagen, um proxy_fcgi zu verwenden, um PHP-Dateien im Verzeichnis/usr/share/phpmyadmin zu verarbeiten?

>> aktualisieren < < Ich habe eine proxypassmatch Direktive in conf des phpMyAdmin Apache

ProxyPassMatch ^/phpmyadmin/(.*\.php(/.*)?)$ unix:/var/run/php5-fpm.sock|fcgi:///usr/share/phpmyadmin/ 

erwartet zu arbeiten, aber ich halte den gleichen Fehler.

>> aktualisieren 2 < < ich die php-fpm Unix-Socket mit Netzwerk ersetzt (127,1: 9000) und ersetzt die ProxyPassmatch der virthualhost Datei mit:

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$1 

und in 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 

und alles funktioniert .. wenn ich My.IP gehen zu/phpinfo.php bekomme ich die phpinfo von /var/www/html/phpinfo.php und wenn ich besuchen My.IP/phpMyAdmin/phpinfo .php Ich bekomme den verarbeiteten Inhalt von /usr/share/phpmyadmin/phpinfo.php.

Mein Problem ist gelöst, aber ich verstehe immer noch nicht, warum die Netzwerkverbindung mit php-fpm funktioniert, aber der Unix-Socket nicht.

+0

Wenn ich dich küssen könnte würde ich, pure genious! – Creek

+0

Du hast mein Leben gerettet! Danke vielmals ! –

+0

Ich habe auch versucht, es mit Unix Sockets zu arbeiten, bis ich aufgab. Es wird nicht funktionieren. Also beschlossen, auf tcp-Verbindung zurückzufallen !! –

Antwort

0

Sieht so aus, als hättest du das gelöst.

  1. In Ihrem PHPMyAdmin wurde mod_php5 verwendet, das wahrscheinlich nicht installiert wurde, da Sie PHP über PHP-FPM verwenden.
  2. Sie haben richtig erkannt, dass phpmyadmin setup einen Proxypass benötigt, der den korrekten Pfad zu den PHP-Dateien hat.

Für das letzte Bit, in der Regel php-fpm auf einem Unix-Socket oder auf TCP hören beide aber nicht.Wie lautet die listen-Direktive in /etc/php5/fpm/pool.d/www.conf? Sind mehr als eine listen Direktiven definiert?

Ich vermute, es ist nur die eine Listen 127.0.0.1:9000 dort eingestellt.

+0

Fühlen Sie sich frei, um meinen Kommentar zu verbessern, wenn es geholfen hat :) – dzhi

1

Konnte dies aufgrund einer Tatsache sein, dass Sockets supported from Apache 2.4.9 sind, und Sie vielleicht einige frühere Build von 2.4 vielleicht verwendet?

+1

yup, das war das Problem mit Unix-Socket, Apache unterstützt Unix-Socket ab v2.4.9 und höher (oder mit einem Patch für v2.4.7). Ich benutzte 2.4.7, aber zu dieser Zeit gab die Apache-Dokumentation nicht an, dass der Unix-Socket nicht unterstützt wurde. – papasj

5

Ich hatte mit genau diesem gleichen Problem zu kämpfen, und ich konnte phpmyadmin nicht arbeiten. Ich bekam immer noch die oben erwähnte "Datei nicht gefunden". Mein Problem war, dass ich meinen ProxyPassMatch in meine 000-default.conf-Datei innerhalb meines ./sites-available-Ordners legen musste und diese Einträge VOR meiner Standard-Einstellung platzieren musste. Dies war der Umriss ganz unten auf dieser Seite, wo ich die Lösung gefunden habe: http://jordanconway.com/set-up-apache-2-4-with-php-fpm-on-ubuntu-13-10/

Hier ist die Art und Weise, wie ich meine Referenz einrichten.

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