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

如何配置NGINX在访问特定路径时发送TCP重置包?

解决NGINX反向代理TCP重置路径时502 Bad Gateway的问题

问题背景

需要配置NGINX(或其他反向代理),当访问网站特定路径(如www.mysite.com/tcp-reset)时发送TCP重置包,强制浏览器重新解析域名用于DNS重绑定攻击。尝试将该路径指向Python Socket服务器(直接访问端口可正常触发TCP重置),但通过NGINX访问时客户端收到502 Bad Gateway错误。

问题原因

你的Python脚本仅接受连接后直接关闭,但NGINX作为HTTP反向代理,会向后端发送完整的HTTP请求,并期望后端返回合法的HTTP响应。脚本未读取NGINX发送的HTTP请求数据就直接断连,NGINX会认为后端服务异常,因此返回502错误。

解决方案

方案1:修改Python Socket脚本

调整脚本,先读取NGINX发送的HTTP请求数据,再设置SO_LINGER选项关闭连接:

import socket
import struct

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind(("127.0.0.1", 1234))
    s.listen(5)
    while True:
        conn, addr = s.accept()
        print(f"Connection from {addr}")
        # 读取HTTP请求内容(无需处理,仅消耗数据)
        try:
            conn.recv(4096)
        except Exception as e:
            print(f"Recv error: {e}")
        # 设置SO_LINGER,关闭连接时发送TCP重置包
        l_onoff = 1
        l_linger = 0
        conn.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', l_onoff, l_linger))
        conn.close()

修改后NGINX配置保持不变,此时NGINX会在发送请求后收到连接关闭信号,将TCP重置包传递给客户端,不再返回502。

方案2:直接用NGINX内置指令(推荐)

NGINX 1.19.10及以上版本支持直接发送TCP重置包,无需依赖后端服务器,配置更简洁高效:

location /tcprst/ {
    # 直接发送TCP重置包
    return reset;
}

如果使用旧版本NGINX,可使用return 444,该指令会让NGINX直接关闭连接不返回HTTP响应,部分环境下也会触发TCP重置:

location /tcprst/ {
    return 444;
}

验证方法

使用curl测试:

curl -v https://www.mysite.com/tcprst/

若输出中包含Connection reset by peer,说明TCP重置包已成功发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:52:35