Nginx if 运算符
Nginx if operators
早上好,程序员们,我正在尝试保护一个文件,为此我正在检查打开它的 http_referer。示例:
if ($http_referer != "whosebug.com") {
return 403;
}
So far so good, this sentence works well, in this case I don't want the equal operator but I want the contain operator like "!~", 所以我把它变成了:
if ($http_referer !~ "whosebug.com") {
return 403;
}
尽管如此,它也运行良好,但为了使一切 运行 完美无缺,我需要像这样在字符串上使用变量:
set $website whosebug.com;
if ($http_referer != $website) {
return 403;
}
这里的问题是我可以将变量与“!=”运算符一起使用,但它不适用于“!~”,在这种情况下,我给出的句子有效,但下面的这句话不起作用工作:
set $website whosebug.com;
if ($http_referer !~ $website) {
return 403;
}
我做错了什么?
P.S:如果你没有得到 if,如果你的 http referer 不包含“whosebug.com”[=27,你将无法打开文件=]
据我所知,您不能在 nginx 配置的正则表达式模式中使用变量。我认为那是因为它们是在 nginx 启动时编译的。一般的解决方案是使用 map
块:
map $http_referer $valid_value {
~Whosebug\.com 1;
}
然后检查结果变量值:
if ($valid_value != 1) {
return 403;
}
但是为了准确检查 Referer
HTTP header 值,存在一个特殊的 valid_referers
指令,您可以在其中使用正则表达式:
valid_referers ~Whosebug\.com;
if ($invalid_referer) {
return 403;
}
早上好,程序员们,我正在尝试保护一个文件,为此我正在检查打开它的 http_referer。示例:
if ($http_referer != "whosebug.com") {
return 403;
}
So far so good, this sentence works well, in this case I don't want the equal operator but I want the contain operator like "!~", 所以我把它变成了:
if ($http_referer !~ "whosebug.com") {
return 403;
}
尽管如此,它也运行良好,但为了使一切 运行 完美无缺,我需要像这样在字符串上使用变量:
set $website whosebug.com;
if ($http_referer != $website) {
return 403;
}
这里的问题是我可以将变量与“!=”运算符一起使用,但它不适用于“!~”,在这种情况下,我给出的句子有效,但下面的这句话不起作用工作:
set $website whosebug.com;
if ($http_referer !~ $website) {
return 403;
}
我做错了什么?
P.S:如果你没有得到 if,如果你的 http referer 不包含“whosebug.com”[=27,你将无法打开文件=]
据我所知,您不能在 nginx 配置的正则表达式模式中使用变量。我认为那是因为它们是在 nginx 启动时编译的。一般的解决方案是使用 map
块:
map $http_referer $valid_value {
~Whosebug\.com 1;
}
然后检查结果变量值:
if ($valid_value != 1) {
return 403;
}
但是为了准确检查 Referer
HTTP header 值,存在一个特殊的 valid_referers
指令,您可以在其中使用正则表达式:
valid_referers ~Whosebug\.com;
if ($invalid_referer) {
return 403;
}