Nginx如何在不违反其他规则的情况下将头应用于特定文件

Nginx如何在不违反其他规则的情况下将头应用于特定文件,nginx,http-headers,Nginx,Http Headers,我有一个nginx设置,有几个带别名的文件夹 location /some-path { alias ../../path/to/folder1/www; } location /some-path-2 { alias ../../path/to/folder2/www; } 每个文件夹都有一个特定的文件,我希望它有一个标题 但是,当我尝试为该文件添加规则时,其他规则停止工作。这部分

我有一个nginx设置,有几个带别名的文件夹

        location /some-path {
            alias ../../path/to/folder1/www;
        }
        location /some-path-2 {
            alias ../../path/to/folder2/www;
        }
每个文件夹都有一个特定的文件,我希望它有一个标题

但是,当我尝试为该文件添加规则时,其他规则停止工作。这部分我从stackoverflow的几个答案中得出:

        location ~* .*file.name$ {
            add_header 'Header' 'value';
        }
然后请求
/some-path/file.name
/some-path-2/file.name
将导致404


我应该如何配置nginx来添加这些头规则,然后返回到其他规则?

解决此问题的方法有几种。但它们中的每一个都涉及到复制粘贴配置的一部分

第一变体 您可以为每个路径定义单独的位置

location ~ /some-path/file.name {
    alias ../../path/to/folder1/www;
    add_header 'Header' 'value';
}

location ~ /some-path-2/file.name {
    alias ../../path/to/folder2/www;
    add_header 'Header' 'value';
}
这会起作用,因为带有正则表达式的位置将首先被处理

第二种变体 您可以使用嵌套位置

location /some-path {
    alias ../../path/to/folder1/www;
    location ~ file.name$ {
        add_header 'Header' 'value';
    }
}
location /some-path-2 {
    alias ../../path/to/folder2/www;
    location ~ file.name$ {
        add_header 'Header' 'value';
    }
}
第三种变体
你是说没有通用的方法来做这件事?好的,实际上不介意。在这种情况下,通用方法会使配置更加困难。为答案添加了示例是的,理解。在我的真实场景中,这不仅仅是一些路径,而是完全不同的路径,很难与一种模式匹配。非常感谢。
map $uri $path_alias {
    default "";
    ~/some-path "../../path/to/folder1/www";
    ~/some-path-2 "../../path/to/folder2/www";
}
server {
    location ~ ^some-path {
        alias  $path_alias;
        location ~ file.name$ {
            add_header 'Header' 'value';
        }
    }
}