Задать вопрос

Nginx, почему не работает root/alias в location?

Имеется следующая конфигурация nginx:
server{
    #имя сервера:
    server_name "my_ip";

    charset utf-8;
    client_max_body_size 128M;

    # корневая директория
    index index.php index.html;

    root /var/www/default;

    location /
    {
        root /var/www/default;
    }

    location /yii2-test-job
    {
        alias /var/www/default/yii2-test-job/web;
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri = 404;
        include fastcgi_params;
        fastcgi_pass  unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;

        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }

}


Проблема в том, по адресу my_ip/yii2-test-job лезет 404 ошибка. Директория /var/www/default/yii2-test-job/web - 100% существует. Просто my_ip работает.

Если вне location поставить
root /var/www/default/yii2-test-job/web;

Все будет работать. А вот почему не работает именно location /yii2-test-job ?
  • Вопрос задан
  • 9610 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Lynn
@Lynn
nginx, js, css
Конечно работает, но только в контексте location /yii2-test-job.

Как только try_files сделал внутренний редирект на /index.php (ктати, никогда не понимал нафига там дописывать ?$args), вы попадаете в location ~ \.php$ и там действует root сервера.

UPD: Я бы написал так:

server {
    root /var/www/default;
    index index.php index.html;

    location /yii2-test-job {
        alias /var/www/default/yii2-test-job/web;
        try_files $uri $uri/ /yii2-test-job/index.php;

        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass  unix:/var/run/php5-fpm.sock;
            include fastcgi_params;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        }
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы