trojan-go icon indicating copy to clipboard operation
trojan-go copied to clipboard

使用cloudflare CDN时候报错failed to accept conn | not a valid websocket handshake request

Open LanQ opened this issue 4 years ago • 5 comments

Hi

我使用github上一键安装脚本https://github.com/jinwyp/one_click_script 安装了trojan-go 配合cloudflare cdn使用的话无法正常打开网页,服务端log显示如下 github.com/p4gefau1t/trojan-go/tunnel/trojan.(*Server).acceptLoop:server.go:123 trojan failed to accept conn | not a valid websocket handshake request

请问可能的原因是什么 谢谢(不开cdn则正常连接)

LanQ avatar Nov 28 '20 15:11 LanQ

Hi

我使用github上一键安装脚本https://github.com/jinwyp/one_click_script 安装了trojan-go 配合cloudflare cdn使用的话无法正常打开网页,服务端log显示如下 github.com/p4gefau1t/trojan-go/tunnel/trojan.(*Server).acceptLoop:server.go:123 trojan failed to accept conn | not a valid websocket handshake request

请问可能的原因是什么 谢谢(不开cdn则正常连接)

我也是使用Jinwyp的一键安装Trojan-go,搭配Cloudflare CDN是没有问题的,建议你可以重新安装,安装时请选支持CDN,同时先关闭CDN功能

predragking avatar Dec 09 '20 11:12 predragking

Hi 我使用github上一键安装脚本https://github.com/jinwyp/one_click_script 安装了trojan-go 配合cloudflare cdn使用的话无法正常打开网页,服务端log显示如下 github.com/p4gefau1t/trojan-go/tunnel/trojan.(*Server).acceptLoop:server.go:123 trojan failed to accept conn | not a valid websocket handshake request 请问可能的原因是什么 谢谢(不开cdn则正常连接)

我也是使用Jinwyp的一键安装Trojan-go,搭配Cloudflare CDN是没有问题的,建议你可以重新安装,安装时请选支持CDN,同时先关闭CDN功能

重试了好几次,版本显示的都是0.10.4,应该是最新的了,但是问题还是会出现,而且等级是[ERROR]

marco9989 avatar Jul 03 '21 13:07 marco9989

Hi 我使用github上一键安装脚本https://github.com/jinwyp/one_click_script 安装了trojan-go 配合cloudflare cdn使用的话无法正常打开网页,服务端log显示如下 github.com/p4gefau1t/trojan-go/tunnel/trojan.(*Server).acceptLoop:server.go:123 trojan failed to accept conn | not a valid websocket handshake request 请问可能的原因是什么 谢谢(不开cdn则正常连接)

我也是使用Jinwyp的一键安装Trojan-go,搭配Cloudflare CDN是没有问题的,建议你可以重新安装,安装时请选支持CDN,同时先关闭CDN功能

重试了好几次,版本显示的都是0.10.4,应该是最新的了,但是问题还是会出现,而且等级是[ERROR]

我后来放弃Trojan-go了,所以后来新版本发生的问题,恐怕要有开发者或者有经验的高手帮忙解决了

predragking avatar Jul 04 '21 10:07 predragking

更新: 使用https://github.com/p4gefau1t/trojan-go/issues/362#issuecomment-876403780 里的设置就好了
对于我的问题, 是nginx那边设置有误, 我的location 里面的东西设置的不对 以及, 如果在nginx配置里

          proxy_ssl_certificate /root/.acme.sh/xxx/fullchain.cer;
          proxy_ssl_certificate_key /root/.acme.sh/xxx/xxx.key;

这两项使用的是从cloudflare上面签发的证书的话, 依旧会报这个错误, 但连接还是成功的

2021年底更新: 上边的方法依然报错但连接成功的原因只是因为cloudflare签发的证书并不是权威证书, 只对来自cloudflare的连接有效, 把cloudflare证书换成let's encrypt等权威证书, 报错就消失了

=======底下是原评论=======

我也出现了相同的问题 用的是截至现在的最新版trojan-go docker image

服务端:

{
  "run_type": "server",
  "local_addr": "0.0.0.0",
  "local_port": 443,
  "remote_addr": "my-fake-site",
  "remote_port": 8080,
  "password": [
      "my-password"
  ],
  "ssl": {
      "cert": "/cloudflare-cert/cert.pem",
      "key": "/cloudflare-cert/key.pem"
  },
  "websocket": {
    "enabled": true,
    "path": "/my-path"
  }
}

客户端:

{
  "run_type": "client",
  "local_addr": "127.0.0.1",
  "local_port": 1080,
  "remote_addr": "my ip",
  "remote_port": 443,
  "password": [
      "my-password"
  ],
  "ssl": {
    "sni": "my.domain.name"
  },
  "websocket": {
    "enabled": true,
    "path": "/my-path"
  }
}

Nginx:

server {
    listen 80;
    listen [::]:80;
    server_name my.domain.name;
    server_tokens off;
    
    return 302 https://$server_name$request_uri;
    
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name my.domain.name;
    server_tokens off;

    ssl_certificate         /etc/ssl/cert.pem;
    ssl_certificate_key     /etc/ssl/key.pem;

    location / { #这一块是错误的, 见我上面说的评论里的设置
        proxy_redirect off;
        proxy_pass https://my-trojan-go-server;

        proxy_set_header  Host                $http_host;
        proxy_set_header  X-Real-IP           $remote_addr;
        proxy_set_header  X-Forwarded-Ssl     on;
        proxy_set_header  X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto   $scheme;
        proxy_set_header  X-Frame-Options     SAMEORIGIN;

        client_max_body_size        100m;
        client_body_buffer_size     128k;

        proxy_buffer_size           4k;
        proxy_buffers               4 32k;
        proxy_busy_buffers_size     64k;
        proxy_temp_file_write_size  64k;

        proxy_ssl_name $host;
        proxy_ssl_server_name on; # need this for proxy to https
    }
}

CXwudi avatar Oct 19 '21 03:10 CXwudi

去用one_click那个trojan脚本装,我之前自己配也不行,后来用一键脚本装的却可以,发现nginx里根本没有使用proxy_pass转发,而是用了stream模块直接在传输层上做转发,直接转发到tronjan监听的端口即可

prprDog avatar Jan 17 '23 12:01 prprDog