директива try_files игнорируется при использовании с FastCGI - PullRequest
0 голосов
/ 13 мая 2018

Я использую nginx в качестве обратного прокси для PHP с PHP-FPM. Я использую следующую конфигурацию:

server {
  listen 80;

  root /var/www/html;
  index index.php;
  error_page 403 /error-403;
  error_page 404 /error-404;

  location ~ \.php$ {
    if ($http_x_forwarded_proto = 'https') {
      set $fe_https 'on';
    }

    try_files $uri =400;

    include fastcgi_params;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param HTTPS $fe_https;
    fastcgi_pass php:9000;
  }
}

Я использую директиву try_files, , как рекомендовано , для предотвращения неконтролируемых запросов к PHP.

Однако после некоторого тестирования try_files, похоже, ничего не делает. Если я запрашиваю URL с несуществующим .php-файлом (например, /no-file.php), я получаю ошибку 404 от PHP. Вместо этого я бы ожидал ошибку 400 от nginx.

Я что-то упустил? try_files, похоже, ничего не делает.

1 Ответ

0 голосов
/ 13 мая 2018

Я нашел, в чем проблема.Проблема была вызвана предложением if:

if ($http_x_forwarded_proto = 'https') {
  set $fe_https 'on';
}

Я не совсем уверен, почему, но его удаление заставляет try_files работать.

...