liberal-boy / tls-shunt-proxy

分流 TLS 流量,支持按 sni 分流,分流 http 和无特征流量
325 stars 66 forks source link

proxyPass到Caddy后出现ERR_HTTP2_PROTOCOL_ERROR错误 #4

Closed tufu9441 closed 4 years ago

tufu9441 commented 4 years ago

使用过程中尝试将某个vhost的流量默认直接转发到Caddy,并在alpn中设置了h2,http/1.1,但访问网站时浏览器(Chrome 80, Microsoft Edge均测试过)出现错误提示ERR_HTTP2_PROTOCOL_ERROR(alpn http/1.1时正常)。 tls-shunt-proxy的运行日志: image tls-shunt-proxy的config.yaml如下:

listen: 0.0.0.0:443
vhosts:
  - name: mydomain.com
    tlsoffloading: true
    managedcert: false
    cert: /usr/local/caddy/mydomain.com.crt
    key: /usr/local/caddy/mydomain.com.key
    alpn: h2,http/1.1
    default:
      handler: proxyPass
      args: 127.0.0.1:8082

对应的Caddyfile中相关的内容如下:

http://mydomain.com:8082 {
  proxy / localhost:8080 {
    transparent
  }
  proxy /secret localhost:8888 {
    websocket
    header_upstream -Origin
  }
}

经测试,如果不经过分流器转发(删除该vhost内容),直接通过Caddy访问8082端口是正常的,并可检测出是h2连接。此时Caddyfile改写为:

https://mydomain.com:8082 {
  tls /usr/local/caddy/mydomain.com.crt /usr/local/caddy/mydomain.com.key {
    must_staple
  }
  proxy / localhost:8080 {
    transparent
  }
  proxy /secret localhost:8888 {
    websocket
    header_upstream -Origin
  }
}

个人认为这跟Caddy是否支持反代h2c流量应该没有关系,整个过程Caddy中proxy的内容并不涉及h2,不知道为何会出现这个问题,还请大佬指点!

liberal-boy commented 4 years ago

caddy 不支持监听 h2c,请参阅 caddyserver/caddy#3227,和 caddy 反代功能无关。建议使用 nginx 替代

tufu9441 commented 4 years ago

好的,我明白了。