phpMyAdmin hinter Reverse Proxy

Apache, Lighttpd, nginx, Cherokee
User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

phpMyAdmin hinter Reverse Proxy

Post by daemotron » 2008-06-09 00:00

Moin,

ich habe folgendes Problem: Ich betreibe phpMyAdmin mit Lighttpd in einem FreeBSD-Jail mit IP-Adresse aus dem 127er Netz. Davor gespannt läuft ein Apache 2.2 als Reverse Proxy, der die Kommunikation mit der Außenwelt übernimmt. Mit anderen Webanwendungen (Serendipity, Zope) funktioniert das auch tadellos, nur phpMyAdmin leitet nach dem Login auf die interne IP-Adresse um, die natürlich von außen nicht erreichbar ist. Irgendwas muss ich da übersehen, ich kriege bloß nicht raus, was es ist. Hier mal die Konfigurationsausschnitte:

Die (um irrelevantes gekürzte) phpMyAdmin config.inc.php

Code: Select all

<?php
$i = 0;
$i++;
$cfg['Servers'][$i]['host'] = '127.0.x.x';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['PmaAbsoluteUri'] = 'https://pma.my-universe.com/';
$cfg['ForceSSL'] = false;
$cfg['ShowPhpInfo'] = false;
$cfg['ShowChgPassword'] = false;
$cfg['AllowArbitraryServer'] = false;
$cfg['LoginCookieValidity'] = 1800;
?>


Die Lighttpd-Konfiguration:

Code: Select all

server.modules = (
    "mod_redirect",
    "mod_alias",
    "mod_access",
    "mod_fastcgi",
    "mod_accesslog" )
server.document-root = "/usr/local/www/phpMyAdmin/"
server.errorlog = "/var/log/lighttpd/error.log"
index-file.names = ( "index.php", "index.html", "index.htm", "default.htm" )
server.event-handler = "freebsd-kqueue" # needed on OS X
mimetype.assign = (
  ".pdf"          =>      "application/pdf",
 ///SNIP///
  ".tar.bz2"      =>      "application/x-bzip-compressed-tar",
  ""              =>      "application/octet-stream",
 )
accesslog.filename = "/var/log/lighttpd/access.log"
url.access-deny = ( "~", ".inc" )
$HTTP["url"] =~ ".pdf$" {
    server.range-requests = "disable"
}
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www"
server.groupname = "www"
fastcgi.server = ( ".php" =>
    ( "localhost" =>
        (
            "socket" => "/var/run/lighttpd/php-fastcgi.socket",
            "bin-path" => "/usr/local/bin/php-cgi"
        )
    )
)


Die Konfiguration für den virtuellen Host auf dem Proxy:

Code: Select all

<VirtualHost 127.0.y.y:443>
        ServerName pma.my-universe.com
        ErrorLog /var/log/proxy/pma.my-universe.com/error-ssl.log
        CustomLog /var/log/proxy/pma.my-universe.com/access-ssl.log combined
        ServerAdmin webmaster@my-universe.com

        SSLEngine on
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        SSLCertificateFile "/usr/local/etc/apache22/server.crt"
        SSLCertificateChainFile "/usr/local/etc/apache22/root.crt"
        <FilesMatch ".(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>

        BrowserMatch ".*MSIE.*"
                nokeepalive ssl-unclean-shutdown
                downgrade-1.0 force-response-1.0

        ProxyRequests Off
        ProxyPass / http://127.0.z.z:80/
        ProxyPassReverse / http://127.0.z.z:80/
        ProxyPassReverseCookieDomain 127.0.z.z:80 pma.my-universe.com
        ProxyPassReverseCookieDomain 127.0.z.z pma.my-universe.com

        <Directory proxy:*>
                Order Deny,Allow
                Allow from all
        </Directory>
</VirtualHost>


Kurze Anmerkung zum Verständnis: Der Proxy lauscht auf 127.0.y.y, der Lighttpd mit phpMyAdmin auf 127.0.z.z - 127.0.x.x ist der MySQL-Server. Damit der Proxy von außen erreichbar ist, gibt es entsprechende pf-Regeln, was hier aber nicht von Bedeutung sein sollte - schließlich laufen andere Applikationen mit demselben Setup problemfrei:

Code: Select all

rdr pass on $if_ext proto tcp from any to $pub_ip_2 port 80 -> $proxy_ip
rdr pass on $if_ext proto tcp from any to $pub_ip_2 port 443 -> $proxy_ip

oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: phpMyAdmin hinter Reverse Proxy

Post by oxygen » 2008-06-09 08:03

Du sollltest dir mal die Konfigurationsvariable $cfg['PmaAbsoluteUri'] von phpmyadmin anschauen.

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: phpMyAdmin hinter Reverse Proxy

Post by daemotron » 2008-06-09 15:59

Code: Select all

$cfg['PmaAbsoluteUri'] = 'https://pma.my-universe.com/';

hatte ich ja schon gesetzt (und phpMyAdmin ist direkt im root des Webservers installiert). Bin jetzt noch auf folgenden Hinweis im Wiki gestoßen:
Config - PmaWiki wrote:But even if you set the correct URL yourself, you're fooled. phpMyAdmin will accidentally overwrite your correct value with an wrong guessed value. You need to fall back to version 2.7.0-pl2 (2005-12-27 15:08) it was messed up somewhere between version 2.8.0.3 and 2.8.2.4

In der offiziellen Doku findet sich kein Wort dazu, aber sollte sich das als wahr erweisen, fliegt PMA in hohem Bogen bei mir raus.
Bin ich denn wirklich der erste, der versucht, PMA hinter einem Reverse Proxy zu betreiben :-k :?: