Perché il mio alias nginx non funziona?


10

Sto cercando di impostare un alias in modo che quando qualcuno accede /phpmyadmin/, nginx lo estrarrà /home/phpmyadmin/piuttosto che dalla solita radice del documento. Tuttavia, ogni volta che tiro su l'URL, mi dà un 404 su tutti gli elementi non inseriti in fastcgi. fastcgi sembra funzionare bene, mentre il resto no. stracemi sta dicendo che sta cercando di estrarre tutto il resto dalla solita radice del documento, ma non riesco a capire perché. Qualcuno può fornire alcune informazioni?

Ecco la parte rilevante della mia configurazione:

            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/;
            }

Come utente apache di lunga data nuovo di nginx, lo trovo davvero strano e inutilmente complicato. Ho trascorso diverse ore a consultare la documentazione per cercare di capire il perché. Qualcuno può spiegare questo comportamento? Gli alias dovrebbero essere proprio questo: un alias per una posizione.
tu-Reinstate Monica-dor duh,

Per quanto ne capisco, gli alias sono "proprio questo", sebbene si noti che se si omette il trailing /dell'alias e della locationdirettiva, la richiesta /phpmyadminfileti porterà effettivamente /home/phpmyadminfile. Per quanto riguarda il motivo per cui la configurazione nella domanda non funziona, mi sembra corretta, quindi sospetto che ci sia un'altra locationdirettiva non mostrata che corrisponde quando non è prevista. In questo caso, poiché aliastermina con il locationprefisso, i documenti nginx suggeriscono di utilizzare root /home;invece .
Scott Stevens,

Risposte:


12

Capito un modo. Non sono sicuro che sia il MIGLIORE, ma sicuramente funziona ora.

Ecco cosa ho fatto:

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

2

Non sono sicuro ma hai provato a scriverlo in questo modo:

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

Inoltre, qual è l'URI da cui stai tentando di accedervi?

Per quanto ho capito, devi usare l'URI

/home/phpmyadmin/

e non solo

/phpmyadmin/

Puoi leggere di più qui: http://wiki.nginx.org/HttpCoreModule


Grazie per la risposta, almeno. Ma si. Ci ho provato. Stessa cosa.
Rob

Forse devi aggiungere l'alias nell'altra posizione. Puoi confrontare la tua configurazione con quella lì: serverfault.com/questions/223028/…
Black-Pixel

1

Provare

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

1

Il motivo per cui non funziona è che il server sta scegliendo la posizione basata su regex e non la posizione basata su prefisso che contiene l'alias.

Ne sceglierà solo uno. C'è un operatore che puoi usare per ottenere una posizione basata su prefisso per superare una regex, ma poi scoprirai che php non funzionerà. La soluzione sarà quella della risposta di Kervin in cui il regex di PHP è nidificato all'interno della posizione con la direttiva alias.

Sospetto, tuttavia, la sua impostazione SCRIPT_FILENAME potrebbe non funzionare lì poiché c'è una diversa capitalizzazione sull'URL e sulla directory con alias.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.