我最近更新了面向公众的 NGINX 实例的设置,以添加对 http2 的支持。在之后查看日志以了解它的使用频率时,我发现与托管站点无关的新日志条目迅速增加。
首先是一堆发出CONNECT
请求的条目,由于 NGINX 实例未配置为转发代理,这些都失败并出现 400 错误。我已经设置了 fail2ban 规则来丢弃来自许多源 IP 地址的流量。我对此并不特别担心(如果需要,请添加评论)。
下一组条目是GET
请求,但没有路径,它们有完整的 URL 作为目标,例如
222.223.121.231 - - [16/Jul/2020:12:57:37 +0100] "GET http://api.gxout.com/proxy/check.aspx HTTP/1.1" 404 199 "http://api.gxout.com/proxy/check.aspx" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
其中大多数都按预期再次收到 404 响应,并且我添加了另一个 fail2ban 规则来丢弃来自源 IP 地址的数据包(同样并没有真正关心这些)。
还有一些类似的得到了 200 个回复,这些是我担心的,例如
35.236.60.202 - - [16/Jul/2020:11:52:28 +0100] "GET http://www.nike.com/ HTTP/1.1" 200 396 "-" "python-requests/2.20.0"
我有以下问题:
- 为什么 NGINX 会为此请求返回 200?
- 有关如何调试的建议?
所有传入流量都应该是 https(必需或 http2),并且我被固定在 TLS 1.2 或 1.3,所以我认为使用 tcpdump 捕获流量不会有帮助(我假设我无法提供私钥进入wireshark并解码数据包?)。
我能想到的唯一其他选择是向 NGINX 添加一些自定义日志记录(是否可以在 nginx 访问日志中记录响应数据?)以记录整个请求/响应。我过去这样做是为了调试 oAuth2.0 令牌交换问题,但仅限于我可以完全控制所有传入流量的系统上。