Nginx 如何在不使用if的情况下执行此操作?
我有一个黑名单的网址,我想检查一下,看看他们是否是一个特定请求的http_参考。如果是的话,我正在试着做一块饼干。我曾尝试使用以下代码执行此操作:Nginx 如何在不使用if的情况下执行此操作?,nginx,Nginx,我有一个黑名单的网址,我想检查一下,看看他们是否是一个特定请求的http_参考。如果是的话,我正在试着做一块饼干。我曾尝试使用以下代码执行此操作: set $blackListUrls "www.somesite.com,www.anothersite.com,www.yetanother.com"; location / { if($blackListUrls ~* $http_referer){...} } 但是关于nginx中的if语句
set $blackListUrls "www.somesite.com,www.anothersite.com,www.yetanother.com";
location / {
if($blackListUrls ~* $http_referer){...}
}
但是关于nginx中的if
语句,听起来我不应该使用它。如果不使用if
语句,我如何完成上面所说的内容
另外-我没有使用nginx的经验,因此如果您看到不同的方法,我应该检查它,请随意指出。如果您想添加基于
引用器的cookie,类似的方法应该可以:
map $http_referer $setcookie {
default "";
http://some.exact.url "cookiename=cookievalue";
~*example\.com "cookiename=cookievalue";
...
}
server {
...
location / {
add_header Set-Cookie $setcookie;
...
}
}
它将$http_referer变量(即referer
头)映射到$setcookie变量中,默认为空(如果映射中列出了referer,则不为空)。add_header
指令用于使用$setcookie值添加Set Cookie
头。如果$addcookie的计算结果为空字符串,则不会添加标头
在映射中
可以使用精确的字符串或正则表达式(前缀为“~”或“~*”)
有关文档,请参见此处:
您可能还想看看nginx。它的设计目的是将推荐人列入白名单,而不是列入黑名单,使用map
将更容易列入黑名单。如果仔细阅读,您会注意到:
如果直接在服务器块中,则可以
另一方面,位置块中的if未保存,除非它们只持有return或rewrite指令
因此,以下内容实际上是完美的保存:
server {
location / {
set blackListUrls "www.somesite.com,www.anothersite.com,www.yetanother.com";
if($blackListUrls ~* $http_referer){return 403;}
}
}
换句话说,您不需要删除所有的ifs,请注意:nginx
已经有了。很有趣。那么您的示例~*example\.com
是否匹配:www.example.com
,example.com
,http://example.com
etc?是的,它将匹配“example\.com”正则表达式,不区分大小写。有关文档的链接,请参见上文。