Warum funktioniert mein Nginx-Alias ​​nicht?

10

Ich versuche, einen Alias ​​einzurichten. Wenn jemand darauf zugreift /phpmyadmin/, wird er von nginx /home/phpmyadmin/nicht aus dem üblichen Dokumentenstamm, sondern von nginx abgerufen. Jedes Mal, wenn ich die URL aufrufe, erhalte ich eine 404 für alle Elemente, die nicht über fastcgi abgerufen wurden. fastcgi scheint gut zu funktionieren, der Rest nicht. stracesagt mir, dass es versucht, alles andere aus dem üblichen Dokumentenstamm zu ziehen, aber ich kann nicht herausfinden, warum. Kann jemand einen Einblick geben?

Hier ist der relevante Teil meiner Konfiguration:

            location ~ ^/phpmyadmin/(.+\.php)$
            {
                    include fcgi.conf;
                    fastcgi_index index.php;
                    fastcgi_pass  unix:/tmp/php-cgi.sock;
                    fastcgi_param SCRIPT_FILENAME /home$fastcgi_script_name;
            }

            location /phpmyadmin
            {
                    alias /home/phpmyadmin/;
            }
rauben
quelle
Als langjähriger Apache-Benutzer, der neu bei nginx ist, finde ich das wirklich seltsam und unnötig kompliziert. Ich habe mehrere Stunden lang die Dokumentation durchgesehen, um zu verstehen, warum. Kann jemand bitte dieses Verhalten erklären? Aliase sollten genau das sein - ein Alias ​​für einen Ort.
Tu-Reinstate Monica-dor duh
Soweit ich es verstehe, sind Aliase "genau das". Beachten Sie jedoch, dass Sie beim Anfordern des Nachlaufs /im Alias und in der locationDirektive /phpmyadminfiletatsächlich angefordert werden /home/phpmyadminfile. Warum die Konfiguration in der Frage nicht funktioniert, sieht für mich korrekt aus. Ich vermute, dass eine andere locationDirektive nicht angezeigt wird, die übereinstimmt, wenn sie nicht beabsichtigt ist. In diesem Fall schlagen die Nginx-Dokumente vor, stattdessenalias das locationPräfix zu verwenden . root /home;
Scott Stevens

Antworten:

12

Einen Weg gefunden. Ich bin mir nicht sicher, ob es das BESTE ist, aber es funktioniert momentan auf jeden Fall.

Folgendes habe ich getan:

        location ~ ^/phpmyadmin/(.*)$
        {
                alias /home/phpmyadmin/$1;
        }
rauben
quelle
2

Ich bin mir nicht sicher, aber haben Sie versucht, es so zu schreiben:

location /phpmyadmin/
        {
                alias /home/phpmyadmin/;
        }

Was ist auch die URI, von der aus Sie versuchen, darauf zuzugreifen?

Soweit ich es verstehe, müssen Sie die URI verwenden

/home/phpmyadmin/

und nicht nur

/phpmyadmin/

Sie können hier mehr darüber lesen: http://wiki.nginx.org/HttpCoreModule

Schwarz-Pixel
quelle
Zumindest danke für eine Antwort. Aber ja. Ich habe das versucht. Gleiche Sache.
Rob
Möglicherweise müssen Sie den Alias ​​dem anderen Speicherort hinzufügen. Sie können Ihre Konfiguration mit der dortigen vergleichen: serverfault.com/questions/223028/…
Black-Pixel
1

Versuchen

location ^~ /phpMyAdmin/
{
    alias /home/phpmyadmin/;

    location ~ \.php$
    {
        include fcgi.conf;
        fastcgi_index index.php;
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_param SCRIPT_FILENAME /home$fastcgi_script_name;
    }
}
Kervin
quelle
1

Der Grund, warum dies nicht funktioniert, ist, dass der Server den auf Regex basierenden Speicherort und nicht den auf Präfixen basierenden Speicherort mit dem Alias ​​auswählt.

Es wird nur eine ausgewählt. Es gibt einen Operator, mit dem Sie einen Präfix-basierten Speicherort abrufen können, um einen regulären Ausdruck zu übertreffen, aber dann werden Sie feststellen, dass PHP nicht funktioniert. Die Lösung wird eine Antwort von Kervin sein, bei der der PHP-Regex mit der Alias-Direktive innerhalb des Speicherorts verschachtelt ist.

Ich vermute jedoch, dass seine Einstellung SCRIPT_FILENAME dort möglicherweise nicht funktioniert, da die URL und das Alias-Verzeichnis unterschiedlich groß geschrieben werden.

thomasrutter
quelle