Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

选用 TLS 传输方案并配置 HTTP/2 回落后,无法正常通过 HTTP/2 访问 Web #573

Closed
hiikii opened this issue May 26, 2021 · 8 comments

Comments

@hiikii
Copy link

hiikii commented May 26, 2021

开发团队你们好!

最近在新服务器上发现了这个问题,不知道标题是否有说清楚,请容我再详细说一下。当配置好 Xray 和 Nginx 后,两者可以正常运行,日志内无相关报错信息,但通过浏览器访问 Web 或者用 Curl 测试时,尽管 ALPN 会显示出来支持 h2 并试图使用 HTTP/2 连接,最终却会提示 HTTP/2 连接失败(浏览器表现为报 err_http2_protocol_error 错误),且在不改变其它配置的情况下,仅将方案切换到 XTLS 后便不会出现此问题。

这是 Xray 相关的配置:

    "inbounds": [
        {
            "port": 443,
            "protocol": "trojan",
            "settings": {
                "clients": [
                    {
                        "password":"",
                        "email": ""
                    }
                ],
                "fallbacks": [
                    {
                        "dest": "8088",
                        "xver": 1
                    },
                    {
                        "alpn": "h2",
                        "dest": "8089",
                        "xver": 1
                    }
                ]
            },
            "streamSettings": {
                "network": "tcp",
                "security": "tls",
                "tlsSettings": {
                    "alpn": [
                        "h2",
                        "http/1.1"
                    ]

这是 Nginx 的配置:

server
    {
        listen 8080 proxy_protocol;
        listen 8089 http2 proxy_protocol;
        listen [::]:8080 proxy_protocol;
        listen [::]:8089 http2 proxy_protocol;
        server_name example.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /var/www/html;
}
@lxhao61
Copy link

lxhao61 commented May 26, 2021

配置错误!
此部分参数:
listen 8080 proxy_protocol;
listen 8089 http2 proxy_protocol;
listen [::]:8080 proxy_protocol;
listen [::]:8089 http2 proxy_protocol;
修改为如下:
listen 127.0.0.1:8080 proxy_protocol;
listen 127.0.0.1:8089 http2 proxy_protocol;

@hiikii
Copy link
Author

hiikii commented May 26, 2021

@lxhao61 非常感谢,修改配置之后确实可以了,只是有点不明白为什么一定要带上地址呢?只是 HTTP/1.1 的话,不这么改也是没问题的。

@lxhao61
Copy link

lxhao61 commented May 26, 2021

1、Xray/v2ray中dest,若只填 port,数字或字符串均可,形如 80、"80",通常指向一个明文 http 服务(addr 会被补为 "127.0.0.1")。
2、猜测参数实际执行顺序影响,listen [::]:8080 proxy_protocol;错误后影响listen 8089 http2 proxy_protocol;执行。

@hiikii
Copy link
Author

hiikii commented May 26, 2021

@lxhao61 抱歉,前面忘记自己测试 XTLS 的时候改成 XTLS 的方案了,实际换回 TLS 测试依然是这个问题,所以我想这不应该是 Nginx 配置的问题,listen [::]:8080 只是用于监听 IPv6 地址的配置方式,并不是配置错误,这个 Nginx 是允许的。

@lxhao61
Copy link

lxhao61 commented May 26, 2021

@lxhao61 抱歉,前面忘记自己测试 XTLS 的时候改成 XTLS 的方案了,实际换回 TLS 测试依然是这个问题,所以我想这不应该是 Nginx 配置的问题,listen [::]:8080 只是用于监听 IPv6 地址的配置方式,并不是配置错误,这个 Nginx 是允许的。

你服务器有IPv6地址?我猜测的是Nginx参数执行顺序影响。若没有IPv6,你配置了listen [::]:8080 proxy_protocol;,影响listen 8089 http2 proxy_protocol;执行。

@hiikii
Copy link
Author

hiikii commented May 27, 2021

@lxhao61 抱歉,前面忘记自己测试 XTLS 的时候改成 XTLS 的方案了,实际换回 TLS 测试依然是这个问题,所以我想这不应该是 Nginx 配置的问题,listen [::]:8080 只是用于监听 IPv6 地址的配置方式,并不是配置错误,这个 Nginx 是允许的。

你服务器有IPv6地址?我猜测的是Nginx参数执行顺序影响。若没有IPv6,你配置了listen [::]:8080 proxy_protocol;,影响listen 8089 http2 proxy_protocol;执行。

有的,本地和公网 IP 我都有,而且前面也说过,在不改变其它配置的情况下,换用 XTLS 是正常的,所以我觉得不像是 Nginx 的问题。

@hiikii
Copy link
Author

hiikii commented Jun 12, 2021

尝试将fallback setting 中alpn的h2去除

谢谢你提供的思路,在仅设置一项默认 fallback 的情况下,确实是正常了。我一开始设置了两个不同的端口本来是为了方便区分的,只是没想到 TLS 会在这里出问题,看来以后还是不要做区分了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants
@hiikii @lxhao61 @hmol233 and others