Closed wenjinlibug closed 3 years ago
www.website.com { tls user@email.com gzip root /var/www/ log /var/log/caddy/access.log proxy /xxxxx localhost:123 { websocket header_upstream -Origin } proxy /yyyy https://localhost:1234 { insecure_skip_verify transparent }
换Caddy1看看呢,或者Caddy2用上面的参数试试
@o0HalfLife0o 試過不行,會提示head错误,如果用tls重新加密仍然會提示錯誤。
剛剛更新了2.1,看了下更新文檔有提到增加h2c支持,找個時間再試試看。
transport http {
versions h2c
}
同样提示' failed to read request header > stream error: stream ID
@o0HalfLife0o 試過不行,會提示head错误,如果用tls重新加密仍然會提示錯誤。 剛剛更新了2.1,看了下更新文檔有提到增加h2c支持,找個時間再試試看。 transport http { versions h2c } 同样提示' failed to read request header > stream error: stream ID ; CANCEL'
遇到同样问题,也没有测通。caddy2.1.1
This is due a bug in Caddy v2, I submitted a PR to address the issue, hope it would be merged soon. caddyserver/caddy#3556
这里有人试过自己 git clone devel version caddy 来 build 吗? 我 build 了还是一样报错
这里有人试过自己 git clone devel version caddy 来 build 吗? 我 build 了还是一样报错
提供一下你的caddy配置文件 以及 v2ray 服务端和客户端配置文件看看(隐去隐私信息)。
这里有人试过自己 git clone devel version caddy 来 build 吗? 我 build 了还是一样报错
提供一下你的caddy配置文件 以及 v2ray 服务端和客户端配置文件看看(隐去隐私信息)。
你好, 这是我的客户端与服务端的配置, 还请过目 https://gist.github.com/hang333/5021e39f8f6f3fe5b94a1cf571c8c245
大致看了一下, https://gist.github.com/hang333/5021e39f8f6f3fe5b94a1cf571c8c245#file-caddyfile-L32 这一节可以这样定义:
reverse_proxy /h2path http://localhost:h2port {
transport http {
versions h2c 2
}
}
https://gist.github.com/hang333/5021e39f8f6f3fe5b94a1cf571c8c245#file-server_v2ray-json-L41 这一行改成: "security": "none",
并且去掉"tlsSettings" 那一节。
Caddy 中的 /h2path 需要 和 v2ray server端的"httpSettings": { "path": "/h2path"} 一致。
试试看。
大致看了一下, https://gist.github.com/hang333/5021e39f8f6f3fe5b94a1cf571c8c245#file-caddyfile-L32 这一节可以这样定义:
reverse_proxy /h2path http://localhost:h2port { transport http { versions h2c 2 } }
https://gist.github.com/hang333/5021e39f8f6f3fe5b94a1cf571c8c245#file-server_v2ray-json-L41 这一行改成: "security": "none",
并且去掉"tlsSettings" 那一节。
Caddy 中的 /h2path 需要 和 v2ray server端的"httpSettings": { "path": "/h2path"} 一致。
试试看。
我试了一下, 还是发生错误了。 我的新配置文件在这里。 https://gist.github.com/hang333/047ecf4c8d7d2868f1ce142d713a3520 还请你看一下。
看上去新的配置文件没问题,重新启动一下v2ray server 和 Caddy,然后输出一下两者的日志看看。
看上去新的配置文件没问题,重新启动一下v2ray server 和 Caddy,然后输出一下两者的日志看看。
我看了一下我 caddy 的日志, 发现 v2ray 请求的时候 host 是 www.example.com , 把 client 的 httpSettings 加多一个 host 数组里放服务器的域名就行了 https://gist.github.com/hang333/047ecf4c8d7d2868f1ce142d713a3520#file-v2ray_client-json-L82 改成
"httpSettings": {
"host": [
"domain"
],
"path": "/h2path"
}
谢谢你的协助!
好的,不客气。你的配置文件可以一直放在那给其他人一个参考了。
我尝试了自己build v2.2.0-rc.1 版本的caddy,现在收到http2请求的时候caddy能正常通过h2c反代给后端,但是收到(比如由CDN回源的)http1.1请求的时候依然会出问题。 这是正常的吗?
caddy的log:
{"level":"error","ts":1598361724.3903546,"logger":"http.log.access.log0","msg":"handled request","request":{"remote_addr":"xxx.xxx.xxx.xxx","proto":"HTTP/1.1","method":"PUT","host":"xxx.xxx.xxx","uri":"/xxx","headers":{"X-Forwarded-For":["xxx.xxx.xxx.xxx"],"Accept-Encoding":["identity"],"User-Agent":["CDN-User-Agent"],"Connection":["Keep-Alive"]},"tls":{"resumed":true,"version":771,"cipher_suite":49200,"proto":"","proto_mutual":true,"server_name":"xxx.xxx.xxx"}},"common_log":"xxx.xxx.xxx.xxx - - [25/Aug/2020:13:22:04 +0000] \"PUT /xxx HTTP/1.1\" 502 0","duration":59.996314451,"size":0,"status":502,"resp_headers":{"Server":["Caddy"]}}
v2ray的error.log:
2020/08/25 13:23:52 [Info] [2861881780] v2ray.com/core/app/proxyman/inbound: connection ends > v2ray.com/core/proxy/vmess/inbound: invalid request from 127.0.0.1:45456 > v2ray.com/core/proxy/vmess/encoding: failed to read request header > unexpected EOF
2020/08/25 13:23:52 [Info] [2861881780] v2ray.com/core/app/proxyman/inbound: failed to close connection > multierr: unexpected EOF |
caddy的配置:
https://xxx.xxx.xxx {
tls /path/to/cert/fullchain.pem /path/to/key/privkey.pem
reverse_proxy /xxx localhost:xxxxx {
header_up Host {http.request.host}
header_up X-Real-IP {http.request.remote.host}
header_up X-Forwarded-For {http.request.remote.host}
header_up X-Forwarded-Port {http.request.port}
header_up X-Forwarded-Proto {http.request.scheme}
transport http {
versions h2c
}
}
其他的web server 配置
}
v2ray的配置:
{
"port": xxxxx,
"listen":"0.0.0.0",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"level": 2,
"alterId": 64,
}
]
},
"streamSettings": {
"network": "http",
"security": "none",
"httpSettings": {
"host": [
"xxx.xxx.xxx"
],
"path": "/xxx"
},
"tlsSettings": {
"certificates": [{
"certificateFile": "/path/to/cert/fullchain.pem",
"keyFile": "/path/to/key/privkey.pem"
}],
"alpn": ["h2"],
"disableSystemRoot": true
}
}
}
嗯,这个特性只有在 <-http2->Caddy<-http2->时会启用。
嗯,这个特性只有在 <-http2->Caddy<-http2->时会启用。
所以现在是用H2就只能不过CDN直连吗? 还是说有什么CDN支持http2回源的?我找了好久发现基本都是1.1回源
可能要按CDN提供商的控制面板配置一下http2 CDN。
可能要按CDN提供商的控制面板配置一下http2 CDN。
我目前为止试了Cloudfront、cloudflare和gcorelab,三家回源都固定只能是http1.x,就没什么办法
This issue is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 5 days
嗯,这个特性只有在 <-http2->Caddy<-http2->时会启用。
所以现在是用H2就只能不过CDN直连吗? 还是说有什么CDN支持http2回源的?我找了好久发现基本都是1.1回源
请问你caddy2 + vmess + h2 配置搞定了吗?我遇到同样的问题想咨询下
嗯,这个特性只有在 <-http2->Caddy<-http2->时会启用。
https://gist.github.com/DdVwl6Fj3a/b74ea62d7f0f43a9b1b3c458b708ccef 大佬能帮忙看下我这个问题吗?我v2ray,caddy2的设置跟上面的老哥学习的,但是配置了以后v2ray还是不通,我配置的静态网站是能够访问的,cdn支持双向h2
嗯,这个特性只有在 <-http2->Caddy<-http2->时会启用。
所以现在是用H2就只能不过CDN直连吗? 还是说有什么CDN支持http2回源的?我找了好久发现基本都是1.1回源
请问你caddy2 + vmess + h2 配置搞定了吗?我遇到同样的问题想咨询下
我之前配置到过直连能访问的程度,但因为当时CDN没法支持http2回源就撤除了。caddy有一个allow h2c(http2 cleartext)的选项好像只在json配置里可用,反代给v2需要启用那个。你可以先绕过cdn直连测试一下能不能通。
嗯,这个特性只有在 <-http2->Caddy<-http2->时会启用。
所以现在是用H2就只能不过CDN直连吗? 还是说有什么CDN支持http2回源的?我找了好久发现基本都是1.1回源
请问你caddy2 + vmess + h2 配置搞定了吗?我遇到同样的问题想咨询下
我之前配置到过直连能访问的程度,但因为当时CDN没法支持http2回源就撤除了。caddy有一个allow h2c(http2 cleartext)的选项好像只在json配置里可用,反代给v2需要启用那个。你可以先绕过cdn直连测试一下能不能通。
直连是通的,就是加了cdn之后不通
嗯,这个特性只有在 <-http2->Caddy<-http2->时会启用。
所以现在是用H2就只能不过CDN直连吗? 还是说有什么CDN支持http2回源的?我找了好久发现基本都是1.1回源
请问你caddy2 + vmess + h2 配置搞定了吗?我遇到同样的问题想咨询下
我之前配置到过直连能访问的程度,但因为当时CDN没法支持http2回源就撤除了。caddy有一个allow h2c(http2 cleartext)的选项好像只在json配置里可用,反代给v2需要启用那个。你可以先绕过cdn直连测试一下能不能通。
直连是通的,就是加了cdn之后不通
那就完全是CDN设置的问题了……这个也没办法泛泛地讲。虽然你说CDN是支持h2回源的,但我还是建议你先排查一下这个,比如看看caddy的log里request的alpn。我之前调查的时候,能找到的CDN都是节点到客户端支持h2,但回源最多只能http/1.1。
嗯,这个特性只有在 <-http2->Caddy<-http2->时会启用。
所以现在是用H2就只能不过CDN直连吗? 还是说有什么CDN支持http2回源的?我找了好久发现基本都是1.1回源
请问你caddy2 + vmess + h2 配置搞定了吗?我遇到同样的问题想咨询下
我之前配置到过直连能访问的程度,但因为当时CDN没法支持http2回源就撤除了。caddy有一个allow h2c(http2 cleartext)的选项好像只在json配置里可用,反代给v2需要启用那个。你可以先绕过cdn直连测试一下能不能通。
直连是通的,就是加了cdn之后不通
那就完全是CDN设置的问题了……这个也没办法泛泛地讲。虽然你说CDN是支持h2回源的,但我还是建议你先排查一下这个,比如看看caddy的log里request的alpn。我之前调查的时候,能找到的CDN都是节点到客户端支持h2,但回源最多只能http/1.1。
我这个cdn,cdn请求Origin的时候是优先h2,也支持http/1.1,但是和我caddy服务器协商出来的是http/1.1,我caddy服务器设置了alpn,只支持h2,不知道为啥能协商出来http/1.1的
嗯,这个特性只有在 <-http2->Caddy<-http2->时会启用。
所以现在是用H2就只能不过CDN直连吗? 还是说有什么CDN支持http2回源的?我找了好久发现基本都是1.1回源
请问你caddy2 + vmess + h2 配置搞定了吗?我遇到同样的问题想咨询下
我之前配置到过直连能访问的程度,但因为当时CDN没法支持http2回源就撤除了。caddy有一个allow h2c(http2 cleartext)的选项好像只在json配置里可用,反代给v2需要启用那个。你可以先绕过cdn直连测试一下能不能通。
直连是通的,就是加了cdn之后不通
那就完全是CDN设置的问题了……这个也没办法泛泛地讲。虽然你说CDN是支持h2回源的,但我还是建议你先排查一下这个,比如看看caddy的log里request的alpn。我之前调查的时候,能找到的CDN都是节点到客户端支持h2,但回源最多只能http/1.1。
我这个cdn,cdn请求Origin的时候是优先h2,也支持http/1.1,但是和我caddy服务器协商出来的是http/1.1,我caddy服务器设置了alpn,只支持h2,不知道为啥能协商出来http/1.1的
你可以试试本地发个只支持1.1的请求给caddy试试?感觉CDN那边多少还是有点问题,具体的你可能得问问CDN的客服
嗯,这个特性只有在 <-http2->Caddy<-http2->时会启用。
所以现在是用H2就只能不过CDN直连吗? 还是说有什么CDN支持http2回源的?我找了好久发现基本都是1.1回源
请问你caddy2 + vmess + h2 配置搞定了吗?我遇到同样的问题想咨询下
我之前配置到过直连能访问的程度,但因为当时CDN没法支持http2回源就撤除了。caddy有一个allow h2c(http2 cleartext)的选项好像只在json配置里可用,反代给v2需要启用那个。你可以先绕过cdn直连测试一下能不能通。
直连是通的,就是加了cdn之后不通
那就完全是CDN设置的问题了……这个也没办法泛泛地讲。虽然你说CDN是支持h2回源的,但我还是建议你先排查一下这个,比如看看caddy的log里request的alpn。我之前调查的时候,能找到的CDN都是节点到客户端支持h2,但回源最多只能http/1.1。
我这个cdn,cdn请求Origin的时候是优先h2,也支持http/1.1,但是和我caddy服务器协商出来的是http/1.1,我caddy服务器设置了alpn,只支持h2,不知道为啥能协商出来http/1.1的
你可以试试本地发个只支持1.1的请求给caddy试试?感觉CDN那边多少还是有点问题,具体的你可能得问问CDN的客服
有没有可能是caddy服务器配置的问题,我是不是可以在caddy服务器中指定只支持h2协议?
嗯,这个特性只有在 <-http2->Caddy<-http2->时会启用。
所以现在是用H2就只能不过CDN直连吗? 还是说有什么CDN支持http2回源的?我找了好久发现基本都是1.1回源
请问你caddy2 + vmess + h2 配置搞定了吗?我遇到同样的问题想咨询下
我之前配置到过直连能访问的程度,但因为当时CDN没法支持http2回源就撤除了。caddy有一个allow h2c(http2 cleartext)的选项好像只在json配置里可用,反代给v2需要启用那个。你可以先绕过cdn直连测试一下能不能通。
直连是通的,就是加了cdn之后不通
那就完全是CDN设置的问题了……这个也没办法泛泛地讲。虽然你说CDN是支持h2回源的,但我还是建议你先排查一下这个,比如看看caddy的log里request的alpn。我之前调查的时候,能找到的CDN都是节点到客户端支持h2,但回源最多只能http/1.1。
我这个cdn,cdn请求Origin的时候是优先h2,也支持http/1.1,但是和我caddy服务器协商出来的是http/1.1,我caddy服务器设置了alpn,只支持h2,不知道为啥能协商出来http/1.1的
你可以试试本地发个只支持1.1的请求给caddy试试?感觉CDN那边多少还是有点问题,具体的你可能得问问CDN的客服
有没有可能是caddy服务器配置的问题,我是不是可以在caddy服务器中指定只支持h2协议?
所以我说,你在本地用curl之类的给服务端caddy发一个请求,看看apln的协商过程,才知道是不是caddy配置的问题。
嗯,这个特性只有在 <-http2->Caddy<-http2->时会启用。
所以现在是用H2就只能不过CDN直连吗? 还是说有什么CDN支持http2回源的?我找了好久发现基本都是1.1回源
请问你caddy2 + vmess + h2 配置搞定了吗?我遇到同样的问题想咨询下
我之前配置到过直连能访问的程度,但因为当时CDN没法支持http2回源就撤除了。caddy有一个allow h2c(http2 cleartext)的选项好像只在json配置里可用,反代给v2需要启用那个。你可以先绕过cdn直连测试一下能不能通。
直连是通的,就是加了cdn之后不通
那就完全是CDN设置的问题了……这个也没办法泛泛地讲。虽然你说CDN是支持h2回源的,但我还是建议你先排查一下这个,比如看看caddy的log里request的alpn。我之前调查的时候,能找到的CDN都是节点到客户端支持h2,但回源最多只能http/1.1。
我这个cdn,cdn请求Origin的时候是优先h2,也支持http/1.1,但是和我caddy服务器协商出来的是http/1.1,我caddy服务器设置了alpn,只支持h2,不知道为啥能协商出来http/1.1的
你可以试试本地发个只支持1.1的请求给caddy试试?感觉CDN那边多少还是有点问题,具体的你可能得问问CDN的客服
有没有可能是caddy服务器配置的问题,我是不是可以在caddy服务器中指定只支持h2协议?
所以我说,你在本地用curl之类的给服务端caddy发一个请求,看看apln的协商过程,才知道是不是caddy配置的问题。
我不使用cdn的时候,直连caddy服务器是没问题的。PS:curl看协商过程该咋写命令?
所以我说,你在本地用curl之类的给服务端caddy发一个请求,看看apln的协商过程,才知道是不是caddy配置的问题。
我不使用cdn的时候,直连caddy服务器是没问题的。PS:curl看协商过程该咋写命令?
你不使用CDN的时候,和caddy通信的是你配置好指定只使用h2的v2ray client。负责回源的CDN节点和v2ray client的请求行为应该并不一致,caddy能和后者通信不一定就能和前者通信。我估计curl的行为可能更接近前者一些。 我记得curl加-v的flag能看到详细的过程,这很容易搜到的。
所以我说,你在本地用curl之类的给服务端caddy发一个请求,看看apln的协商过程,才知道是不是caddy配置的问题。
我不使用cdn的时候,直连caddy服务器是没问题的。PS:curl看协商过程该咋写命令?
你不使用CDN的时候,和caddy通信的是你配置好指定只使用h2的v2ray client。负责回源的CDN节点和v2ray client的请求行为应该并不一致,caddy能和后者通信不一定就能和前者通信。我估计curl的行为可能更接近前者一些。 我记得curl加-v的flag能看到详细的过程,这很容易搜到的。
curl看到的是我客户端和cdn前端之间的请求,cdn和v2ray之间的请求我看不到的,确实cdn请求caddy服务器的时候行为不一致,使用的是http/1.1,我联系了cdn提供商一起看这个问题,他们这个cdn是支持h2的,现在就是不知道为啥握手变成了http/1.1
caddy2的配置:
可以看到其實caddy2的配置裏有ws+tls的配置,只是新開了一個端口用來調試h2 使用ws+tls時是完全沒問題的,因此不用懷疑證書的配置。 web方面也完全沒問題。 下面是v2ray 4.25.0的服務端配置: