搜了一下,没有找到问题的解决办法。
现象是:

源站是一个互联网IP加端口,通过curl和telnet在waf所在服务器上都能访问到源站。
配置waf的时候,界面上也显示源站可访问,但是保存后,走了waf的地址就报502,源站无法访问。

服务器只有一个IP,期间还通过tcpdump抓包分析了,后面说是源站有安全措施,禁止了nginx的指纹,我不是专业人士,
所以也不清楚是不是这样。

然后,通过本地nginx代理一次,模拟curl指纹,配置如下:

location / {
        # 固定Host,和curl保持一致
        proxy_set_header Host 源站IP:源站端口;
        # 删掉X-Real-IP、X-Forwarded-For、X-Forwarded-Proto,curl不带这些头!
        # proxy_set_header X-Real-IP $remote_addr;
        # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # proxy_set_header X-Forwarded-Proto $scheme;
        
        proxy_connect_timeout 20s;
        # 关键:改成HTTP/1.0 + Connection: close,每次都是全新短连接,和curl行为一致
        proxy_http_version 1.0;
        proxy_set_header Connection "close";
        chunked_transfer_encoding off;
        proxy_pass http://源站IP:源站端口/;
    }

本地nginx通过以上配置代理后,再通过宝塔的waf,源站指向127.0.0.1:配置的端口
通过这种方式,解决了502的问题。