Pourquoi mon alias nginx ne fonctionne-t-il pas?

10

J'essaie de configurer un alias, donc lorsque quelqu'un y accède /phpmyadmin/, nginx le tirera de /home/phpmyadmin/plutôt que de la racine de document habituelle. Cependant, chaque fois que je récupère l'URL, cela me donne un 404 sur tous les éléments non extraits de fastcgi. fastcgi semble bien fonctionner, alors que le reste ne fonctionne pas. straceme dit qu'il essaie de retirer tout le reste de la racine de document habituelle, mais je ne peux pas comprendre pourquoi. Quelqu'un peut-il donner un aperçu?

Voici la partie pertinente de ma config:

            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/;
            }
Rob
la source
En tant qu'utilisateur d'Apache depuis longtemps nouveau sur nginx, je trouve cela vraiment étrange et inutilement compliqué. J'ai passé plusieurs heures à parcourir la documentation pour essayer de comprendre pourquoi. Quelqu'un peut-il expliquer ce comportement? Les alias ne devraient être que cela - un alias vers un emplacement.
tu-Reinstate Monica-dor duh
Pour autant que je le comprenne, les alias sont "juste ça", bien que notez que si vous omettez la fin /de l'alias et de la locationdirective, demander /phpmyadminfilevous obtiendra réellement /home/phpmyadminfile. Quant à savoir pourquoi la configuration de la question ne fonctionne pas, elle me semble correcte, donc je soupçonne qu'il y a une autre locationdirective non affichée qui correspond lorsqu'elle n'est pas prévue. Dans ce cas, comme aliasse termine par le locationpréfixe, les documents nginx suggèrent d'utiliser à la root /home;place .
Scott Stevens

Réponses:

12

J'ai trouvé un moyen. Je ne sais pas si c'est le MEILLEUR, mais ça marche certainement en ce moment.

Voici ce que j'ai fait:

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

Je ne suis pas sûr, mais avez-vous essayé de l'écrire de cette façon:

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

De plus, quel est l'URI à partir duquel vous essayez d'y accéder?

Pour autant que je le comprends, vous devez utiliser l'URI

/home/phpmyadmin/

et pas seulement

/phpmyadmin/

Vous pouvez en savoir plus à ce sujet ici: http://wiki.nginx.org/HttpCoreModule

Pixel noir
la source
Merci pour une réponse, au moins. Mais ouais. J'ai essayé ça. Même chose.
Rob
Vous devrez peut-être ajouter l'alias à l'autre emplacement. Vous pouvez comparer votre configuration à celles qui s'y trouvent
Black-Pixel
1

Essayer

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
la source
1

La raison pour laquelle cela ne fonctionne pas est que le serveur choisit l'emplacement basé sur l'expression régulière et non l'emplacement basé sur le préfixe qui contient l'alias.

Il n'en choisira qu'un. Il y a un opérateur que vous pouvez utiliser pour obtenir un emplacement basé sur un préfixe pour surclasser un regex, mais vous constaterez que php ne fonctionnera pas. La solution sera l'une comme la réponse de kervin où la regex PHP est imbriquée à l'intérieur de l'emplacement avec la directive alias.

Je soupçonne cependant que son paramètre SCRIPT_FILENAME peut ne pas fonctionner ici car il y a des majuscules différentes sur l'URL et le répertoire alias.

thomasrutter
la source