轮询算法不校验http方法,需在server或location块中配置方法限制规则:优先用444拦截trace/track,再用正则白名单限制get/head/post等标准方法,配合host头、请求头及user-agent校验,并实测验证。

轮询算法本身不处理 HTTP 方法校验,它只负责把请求分发给后端服务器。要拦截非标准自定义 HTTP 方法,必须在 server 或 location 块中单独配置方法限制规则,不能依赖负载均衡策略。
明确 HTTP 方法白名单
只放行业务实际需要的标准方法,其余一律拒绝。这是最可靠的方式:
- 在
server或关键location内添加:if ($request_method !~ ^(GET|HEAD|POST|OPTIONS)$) { return 405; } - 若需支持 PATCH 或 PUT,必须显式加入正则,例如
^(GET|HEAD|POST|PUT|PATCH|OPTIONS)$ - 避免用
deny PUT;这类黑名单写法,无法覆盖任意拼写的自定义方法(如 FOO、X-ADMIN)
优先拦截 TRACE 和 TRACK
这两个方法有明确安全风险,应比白名单更早处理:
- 在白名单判断之前添加:
if ($request_method ~ ^(TRACE|TRACK)$) { return 444; } - 使用
444状态码可直接关闭连接,不返回任何响应体,比405更彻底 - 确保该规则位于
if白名单规则上方,防止被跳过
配合 Host 头与请求头规范校验
单靠方法限制不够,攻击常组合异常 Host 或超长头部绕过:
- 拒绝含端口号的 Host:
if ($host ~ ":[0-9]+$") { return 400; } - 限制请求头缓冲区大小,防畸形头部藏匿非法方法:
client_header_buffer_size 1k;<br>large_client_header_buffers 2 2k;
- 检查
User-Agent是否含扫描器特征(如 sqlmap),命中即return 403
验证是否生效
配置完成后必须实测,避免误伤合法流量:
- 用
curl -X FOO https://yoursite.com/验证是否返回405或连接被重置(444) - 确认
OPTIONS请求仍能正常响应 CORS 预检(若前端依赖) - 所有
if规则请放在server或location块内,不要置于http顶层











