You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx access.log异常GET带完整外部URL请求构造及复现咨询

异常HTTP请求问题解答

1. 请求构造原理

HTTP协议标准中定义的请求行原生支持4种请求URI格式,其中的absolute-form格式就是完整的URL路径,原本设计用于正向代理场景,要求代理服务端请求对应URL后返回结果。攻击者没有使用浏览器、普通curl调用这类默认走origin-form(相对路径/xxx格式)的客户端,而是直接通过TCP连接拼接原始请求报文,或者使用Go语言HTTP客户端的底层接口自定义请求行,就可以构造出日志里的这类请求。日志中的UAGo-http-client/1.1也印证了攻击者大概率使用Go语言编写的扫描工具发起请求。

2. Nginx返回200的原因

Nginx默认没有限制absolute-form格式的请求,匹配逻辑如下:

  • 提取请求行中完整URL的Host字段,和已配置的所有server_name做匹配
  • 如果没有匹配到对应站点配置,请求会落到Nginx的默认server块处理
    你日志中1400字节的响应,就是默认安装Nginx时自带的欢迎页的标准大小,说明这类请求没有匹配到你绑定的站点abc-xyz-1234.com,被默认server处理返回了欢迎页,所以状态码为200。

3. 模拟请求的方法

不要使用curl的默认调用逻辑,两种可行的模拟方式:

  • 使用nc直接发送原始HTTP报文
nc abc-xyz-1234.com 80 << EOF
GET http://xxxxxxxxx.com/ HTTP/1.1
Host: abc-xyz-1234.com
Connection: close

EOF
  • 7.55及以上版本的curl可以通过--request-target参数自定义请求行
curl --request-target http://xxxxxxxxx.com/ http://abc-xyz-1234.com

修复建议

可以通过Nginx配置直接拦截这类异常请求,避免被扫描利用:

  1. 配置默认server块直接返回444状态码,断开所有未匹配到绑定域名的请求
  2. 增加规则直接拦截以http/https开头的请求URI:
if ($request_uri ~ ^https?://) {
    return 444;
}

内容的提问来源于stack exchange,提问作者GLK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:36:01