我最近读了很多关于nginx的文章,并在网上找到了两种方法。第一个似乎在服务器上下文级别工作,第二个建议用于位置上下文级别。
问题。limit_except
在服务器上下文级别使用是否合适?
方法 #1 ($request_method) 嵌入变量
# server context
#
# Disable unwanted HTTP methods
# Most of the time, you need just GET, HEAD & POST HTTP request in your web application.
# Allowing TRACE or DELETE is risky as it can allow Cross-Site Tracking attack and potentially
# allow an attacker to steal the cookie information.
# So we return a 405 Not Allowed if someone is trying to use TRACE, DELETE, PUT, OPTIONS.
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}
方法 #2 ( limit_except ) 方法
# Limits allowed HTTP methods inside a location.
. . .
location /restricted-write {
# location context
limit_except GET HEAD {
# limit_except context
allow 192.168.1.1/24;
deny all;
}
}
不,您不能
limit_except
在server
上下文级别使用。根据ngx_http_core_module 文档,它仅在location
上下文中有效:方法 #1 是类似功能的解决方法/替代方法,但需要注意的是,您的示例将给出 HTTP 状态 405 响应,而不是响应的 403 状态
limit_except
。方法 #2 可以缩短为
HEAD
根据http://nginx.org/en/docs/http/ngx_http_core_module.html#limit_except将被允许