Nginx日志中出现"invalid method"错误通常表示客户端发送了一个不符合HTTP协议规范的请求方法。常见原因包括:
在Nginx配置中添加对非法方法的过滤:
server {
# 只允许标准HTTP方法
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|OPTIONS|PATCH)$ ) {
return 444; # 关闭连接而不发送响应
}
# 或者返回405 Method Not Allowed
# if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|OPTIONS|PATCH)$ ) {
# return 405;
# }
}
对于特定location,限制允许的方法:
location /api/ {
limit_except GET POST {
deny all;
}
}
如果是你自己的应用程序导致的: - 检查客户端代码确保使用正确的HTTP方法 - 验证所有API调用使用标准方法(GET, POST等) - 检查是否有中间件或代理修改了请求方法
增加更详细的日志记录以识别问题来源:
log_format detailed '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$request_method"';
如果是恶意请求导致的: - 考虑安装和配置ModSecurity等WAF - 使用fail2ban自动封禁频繁发送非法方法的IP
# 在Nginx中封禁特定IP
deny 192.168.1.1;
nginx -s reload
tail -f /var/log/nginx/error.log
通过以上措施,应该能够有效减少或消除"invalid method"错误日志条目。