Чому псевдонім 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


Дякую за відповідь, принаймні. Але так. Я спробував це. Однакові речі.
Роб

Можливо, вам доведеться додати псевдонім до іншого місця. Ви можете порівняти свою конфігурацію з тією, що там: 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;
    }
}

1

Причина цього не працює в тому, що сервер вибирає місце на основі регулярних виразів, а не розташування на основі префікса, у якому є псевдонім.

Він обере лише один. Є оператор, який ви можете використовувати, щоб отримати місце на основі префікса, щоб випередити регулярний вираз, але тоді ви знайдете, що php не працює. Рішення буде таким, як відповідь kervin, коли PHP-регекс вкладений всередині місця розташування з директивою псевдоніму.

Але я підозрюю, що його налаштування SCRIPT_FILENAME може не працювати там, оскільки в URL-адресі та в псевдонімічному каталозі є інша велика літера.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.