与FastCGI一起使用时,try_files指令被忽略

时间:2018-05-13 16:01:37

标签: nginx fastcgi nginx-location

我使用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指令as recommended来防止对PHP的不受控制的请求。

但是,经过一些测试后,try_files似乎没有做任何事情。如果我请求带有不存在的.php文件的URL(如/no-file.php),我会从PHP收到404错误。相反,我预计nginx会出现400错误。

我错过了什么吗? try_files似乎没有做任何事情。

1 个答案:

答案 0 :(得分:0)

我发现了问题所在。问题是由if子句引起的:

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

我不确定原因,但删除它会使try_files正常工作。