Nginx如何在不违反其他规则的情况下将头应用于特定文件
我有一个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; } 每个文件夹都有一个特定的文件,我希望它有一个标题 但是,当我尝试为该文件添加规则时,其他规则停止工作。这部分
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';
}
}
}