Конфигурация Nginx отправляет все URL-адреса на домашнюю страницу

#nginx #nginx-config #nginx-location

Вопрос:

При использовании приведенной ниже конфигурации мое веб-приложение работает должным образом:

 server {
    root /var/www/html/frontend/web;

    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }
}
 

Однако, когда я пробую конфигурацию ниже, она не работает:

 server {
    set $base_root /var/www/html;

    root $base_root;

    index index.php index.html;

    location / {
        root $base_root/frontend/web;

        try_files $uri $uri/ /index.php$is_args$args;
    }
}
 

Теперь все URL-адреса просто возвращают меня на главную страницу.

Почему? Что я здесь упускаю?

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

Подписано, Вне Себя От Разочарования

Отредактируйте, включая блок .php ниже:

 location ~ .(php|phar)(/.*)?$ {
        fastcgi_split_path_info ^(. .(?:php|phar))(/.*)$;

        fastcgi_intercept_errors on;
        fastcgi_index  index.php;

        fastcgi_param  QUERY_STRING       $query_string;
        fastcgi_param  REQUEST_METHOD     $request_method;
        fastcgi_param  CONTENT_TYPE       $content_type;
        fastcgi_param  CONTENT_LENGTH     $content_length;

        fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
        fastcgi_param  REQUEST_URI        $request_uri;
        fastcgi_param  DOCUMENT_URI       $document_uri;
        fastcgi_param  DOCUMENT_ROOT      $document_root;
        fastcgi_param  SERVER_PROTOCOL    $server_protocol;
        fastcgi_param  REQUEST_SCHEME     $scheme;
        fastcgi_param  HTTPS              $https if_not_empty;

        fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
        fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

        fastcgi_param  REMOTE_ADDR        $remote_addr;
        fastcgi_param  REMOTE_PORT        $remote_port;
        fastcgi_param  SERVER_ADDR        $server_addr;
        fastcgi_param  SERVER_PORT        $server_port;
        fastcgi_param  SERVER_NAME        $server_name;

        # PHP only, required if PHP was built with --enable-force-cgi-redirect
        fastcgi_param  REDIRECT_STATUS    200;

        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO $fastcgi_path_info;
        fastcgi_pass   php-fpm;
    
 

Комментарии:

1. В вашем примере отсутствует location ~ .php$ блок, в котором index.php обрабатывается и, вероятно root , вызывает у вас проблемы.

2. Я добавил блок к исходному вопросу. Это то, что у меня было на месте. Если что-то не так, я не уверен, как это диагностировать.

3. Так /var/www/html для чего же это? И включает ли он PHP-файлы?

4. Да, именно там находятся мои файлы проекта. Я использую шаблон Yii2-advanced, у которого есть интерфейс и бэкэнд. frontend/web это для интерфейса, backend/web это для бэкенда. Я еще не включил никаких блоков для бэкенда, так как я даже не могу правильно загрузить какие-либо страницы на интерфейсе (кроме домашней страницы). И если это вообще имеет значение, я запускаю это на эластичном бобовом стебле AWS.