Почему мой псевдоним nginx не работает?

10

Я пытаюсь настроить псевдоним, чтобы при получении доступа /phpmyadmin/nginx извлекал его, /home/phpmyadmin/а не из обычного корня документа. Тем не менее, каждый раз, когда я открываю URL, он дает мне 404 на все элементы, которые не были получены через fastcgi. fastcgi, кажется, работает нормально, а остальное - нет. straceговорит мне, что пытается извлечь все остальное из обычного корня документа, но я не могу понять, почему. Кто-нибудь может дать некоторое представление?

Вот соответствующая часть моего конфига:

            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/;
            }
обкрадывать
источник
Как давний пользователь Apache, плохо знакомый с nginx, я нахожу это действительно странным и излишне сложным. Я потратил несколько часов на просмотр документации, чтобы понять, почему. Может кто-нибудь объяснить, пожалуйста, это поведение? Псевдонимы должны быть просто псевдонимом местоположения.
Tu-Reinstate Monica-dor duh
Насколько я понимаю, псевдонимы «только что», хотя отмечают , что если опустить буксировку /в псевдониме и в locationдирективе, запрашивающий /phpmyadminfileбудет реально получить вас /home/phpmyadminfile. Что касается того, почему конфиг в вопросе не работает, он выглядит правильно для меня, так что я подозреваю, что есть еще одна locationне показанная директива, которая соответствует, когда не предназначена. В этом случае, поскольку aliasзаканчивается locationпрефиксом, документы nginx предлагают использовать root /home;вместо этого .
Скотт Стивенс

Ответы:

12

Выяснили способ. Я не уверен, что это ЛУЧШИЙ, но он, безусловно, работает прямо сейчас.

Вот что я сделал:

        location ~ ^/phpmyadmin/(.*)$
        {
                alias /home/phpmyadmin/$1;
        }
обкрадывать
источник
2

Я не уверен, но вы пытались написать это так:

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

Кроме того, что такое URI, с которого вы пытаетесь получить к нему доступ?

Насколько я понимаю, вы должны использовать URI

/home/phpmyadmin/

и не только

/phpmyadmin/

Вы можете прочитать больше об этом здесь: http://wiki.nginx.org/HttpCoreModule

Black-Pixel
источник
Спасибо за ответ, по крайней мере. Но да Я попробовал это. То же самое.
Роб
Может быть, вам нужно добавить псевдоним в другое место. Вы можете сравнить ваши настройки с теми, что есть: serverfault.com/questions/223028/…
Black-Pixel,
1

Пытаться

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
источник
1

Причина, по которой это не работает, заключается в том, что сервер выбирает местоположение на основе регулярных выражений, а не местоположение на основе префиксов с псевдонимом.

Он выберет только один. Есть оператор, который вы можете использовать для получения префиксного местоположения, чтобы опередить регулярное, но тогда вы обнаружите, что php не будет работать. Решение будет похоже на ответ Кервина, где регулярное выражение PHP вложено в расположение с помощью директивы alias.

Я подозреваю, однако, что его настройка SCRIPT_FILENAME может не сработать, так как в URL и в псевдониме каталога используются разные прописные буквы.

thomasrutter
источник