使得多个匹配的位置块被处理

使得多个匹配的位置块被处理

在我的 nginx conf.d 文件中,我有以下内容:

  location ~ \.php$ {
    try_files $uri = 404;
    fastcgi_pass unix:/tmp/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }

  location ^~ /dev/ {
    fastcgi_param PHP_VALUE display_errors=On;
  }

我的目标是让 PHP 在任何目录(包括 /dev/ 目录)中解析 *.php,并且在 /dev/ 目录中启用 display_errors。但似乎这些位置不是通过 AND 连接在一起的,而是通过 OR 连接在一起的。因此,如果它与 *.php 匹配,它会将其解析为 PHP 文件,除非它位于 /dev/ 目录中。

我是否必须要冗余并且将 PHP 配置代码重复两次,或者有没有办法可以避免这种冗余?

谢谢!

答案1

是的,你必须要有冗余。除了非常有限的情况外,location块只会解析一次,最接近的匹配获胜。

include不过,您可以通过将通用配置参数移除到单独的文件中,然后将其包含在两个地方来减轻这种麻烦。

相关内容