Nginx 访问日志分析之如何处理请求方法CONNECT?

以下是一段真实日志:

43.248.187.60 – – [23/Jun/2026:02:35:52 +0800] “CONNECT www.baidu.com:443 HTTP/1.1” 400 166 “-” “-” 43.248.187.60 – – [23/Jun/2026:02:35:52 +0800] “CONNECT www.baidu.com:443 HTTP/1.1” 400 166 “-” “-“

这是Nginx 访问日志,含义很明确:

  • 来源 IP:43.248.187.60
  • 时间:23/Jun/2026:02:35:52 +0800
  • 请求方法:CONNECT
  • 目标:www.baidu.com:443
  • 协议:HTTP/1.1
  • 状态码:400 Bad Request
  • 发送字节:166

这日志是什么意思?

  1. CONNECT 请求 这是代理请求,客户端试图让你的服务器充当代理,去连接百度 443 端口。
  2. 状态码 400 你的 Nginx 不支持 / 不允许 CONNECT 代理,直接拒绝了这个请求,返回 400 错误。
  3. 而系统日志连续两条相同记录 说明客户端重试了一次,依然被拒绝。

对服务器的影响

  • 正常安全现象,不是攻击,也不会造成危害。
  • 只是有人 / 程序试图用你的服务器做 HTTP 代理,被直接拒绝
  • 可以忽略,不用处理

当然我们这样操作:屏蔽 CONNECT 请求的 Nginx 配置怎么写?

直接给你可直接复制粘贴的 Nginx 屏蔽 CONNECT 请求配置,两种常用方案任选。


方案一:全局拦截(推荐)

假如你服务器有多个站点,推荐此方法,它会对当前服务器上所有站点生效。

nginx.confhttp {} 块里加:

if ($request_method = CONNECT) {
    return 403;
}

作用:整个 Nginx 所有站点都拒绝 CONNECT 代理请求,直接返回 403,不再打日志。


方案二:只在某个站点拦截

在对应 server {} 块里加:

if ($request_method = CONNECT) {
    return 403;
}

方案三:完全不记录、直接丢弃(最干净)

直接把这类请求丢弃。

if ($request_method = CONNECT) {
    access_log off;
    return 444;
}
  • 444 是 Nginx 专用码:直接关闭连接,不返回任何内容
  • access_log off 这条请求不再写日志,你的日志就干净了

改完后记得重载

nginx -t
systemctl reload nginx

# 或者
service nginx reload

这样你日志里就不会再出现这类 CONNECT 记录了。

本文首发于 58Linux技术博客,专注Ubuntu桌面使用、Linux服务器运维与网站搭建实战。

发表评论

粤ICP备10052831号 | © 2026 58Linux 技术笔记. All Rights Reserved. | 联系我们 | 关于本站
本站内容开放共享,仅供学习交流 | 专注 Ubuntu & Linux 实战教程
Built with GeneratePress