Назад | Перейти на главную страницу

nginx + fpm + подкаталог

У меня есть конфигурация nginx, которая выглядит так:

location ^~ /movies {
    alias /var/dp.cx/movies/current/public;
    fastcgi_index index.php;
    try_files $uri /movies/index.php;

    location ~* \.php {
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        include /etc/nginx/fastcgi_params;
    }
}

Это приложение Laravel, которое работает практически полностью из коробки. Однако у меня есть несколько небольших проблем с этой конфигурацией.

Я не уверен, где я нашел эту конфигурацию, но, похоже, она наиболее близка к "рабочей" конфигурации, которую я когда-либо находил для nginx + fpm с URL-адресом подкаталога.

Нажатие / movies вызывает ошибку 404. Нажатие / movies / работает успешно.

Чтобы решить эту проблему на уровне сервера ... добавьте следующий блок местоположения рядом с существующим блоком местоположения для фильмов ...

location = /movies {
  return 301 $scheme://$host/movies/;
}

При нажатии на один из URL-адресов пагинации (/ movies / test? Page = 2) информация из строки запроса не поступает.

Это связано с try_files строка, которая не передает строку запроса. Чтобы передать его, используя следующие try_files директива будет работать ...

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

Прямая цитата из http://nginx.org/en/docs/http/ngx_http_core_module.html ...

$ is_args - «?» если строка запроса имеет аргументы, или пустую строку в противном случае.