[alibaba/tengine]Stream server_name 不生效问题 // stream server_name cannot work

2024-05-15 499 views
5
stream {
    server {
        listen          8840;
        server_name     t.dev.wanfeng-inc.com;

        proxy_pass      172.28.133.75:8840;
        ssl_preread     on;
        proxy_protocol  on;
    }

    server {
        listen          8840;
        server_name     t.test.wanfeng-inc.com;

        proxy_pass      172.28.133.14:8840;
        ssl_preread     on;
        proxy_protocol  on;
    }
}

这样配置,分别 telnet t.dev.wanfeng-inc.com 8840 telnet t.test.wanfeng-inc.com 8840,始终都是 t.dev.wanfeng-in.com 有效。

另外 default server stream 里面怎么配?

回答

2

需要使用 ssl 协议,ssl 握手时有 sni 字段可以携带域名,tengine 才能获取请求域名进行匹配,单纯的 tcp 是没有地方可以携带域名,无法进行匹配。

参考:https://tengine.taobao.org/document/stream_sni.html

1

I am closing this issue. Please feel free to reopen it if you have any further questions.

1

需要使用 ssl 协议,ssl 握手时有 sni 字段可以携带域名,tengine 才能获取请求域名进行匹配,单纯的 tcp 是没有地方可以携带域名,无法进行匹配。

参考:https://tengine.taobao.org/document/stream_sni.html

./configure \ --prefix=/opt/tengine \ --with-ld-opt="-Wl,-rpath,/usr/local/lib" \ --with-ipv6 \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_addition_module \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module \ --with-stream_geoip_module \ --with-stream_ssl_preread_module \ --with-stream_sni \ --add-module=./modules/ngx_backtrace_module \ --add-module=./modules/ngx_debug_pool \ --add-module=./modules/ngx_debug_timer \ --add-module=./modules/ngx_http_concat_module \ --add-module=./modules/ngx_http_footer_filter_module \ --add-module=./modules/ngx_http_lua_module \ --add-module=./modules/ngx_http_proxy_connect_module \ --add-module=./modules/ngx_http_reqstat_module \ --add-module=./modules/ngx_http_slice_module \ --add-module=./modules/ngx_http_sysguard_module \ --add-module=./modules/ngx_http_trim_filter_module \ --add-module=./modules/ngx_http_upstream_check_module \ --add-module=./modules/ngx_http_upstream_consistent_hash_module \ --add-module=./modules/ngx_http_upstream_dynamic_module \ --add-module=./modules/ngx_http_upstream_dyups_module \ --add-module=./modules/ngx_http_upstream_keepalive_module \ --add-module=./modules/ngx_http_upstream_session_sticky_module \ --add-module=./modules/ngx_http_upstream_vnswrr_module \ --add-module=./modules/ngx_http_user_agent_module \ --add-module=./modules/ngx_multi_upstream_module \ --add-module=./modules/ngx_slab_stat \ --without-http_upstream_keepalive_module

2

docker pull kubile/tengine-ohmyzsh:2.4.0

可以看一下这个镜像,这里面用的是上面的参数打包的。

在 stream 里面,也不是说 server_name 无效,server_name 是有效的,但如果同一个端口。

比如: 3389。

# Stream Server
stream {
        include  "stream_blocks/*.conf";
}

路径:stream_blocks/remotedesktop.conf

server {
    listen          3389;
    listen          [::]:3389;
    server_name     1.domain.com;

    proxy_pass      192.168.1.11:3389;
}

server {
    listen          3389;
    listen          [::]:3389;
    server_name     2.domain.com;

    proxy_pass      192.168.1.12:3389;
}

这时候针对: 1.domain.com 2.domain.com

只有一个有效!

8

@chobits

6

listen 开启 ssl,请求的时候使用 ssl 协议请求才会识别 server_name,直接 tcp 请求并未携带域名,tengine 无法匹配,只能找默认 server 段,实际 server_name 都是没生效的,不管什么域名只能走到一个server段

8

listen 开启 ssl,请求的时候使用 ssl 协议请求才会识别 server_name,直接 tcp 请求并未携带域名,tengine 无法匹配,只能找默认 server 段,实际 server_name 都是没生效的,不管什么域名只能走到一个server段

server {
    listen          3389 ssl;
    listen          [::]:3389 ssl;
    server_name     lq.wanfeng-inc.com;

    ssl_certificate certs/*.wanfeng-inc.com_ecc/fullchain.cer;
    ssl_certificate_key certs/*.wanfeng-inc.com_ecc/*.wanfeng-inc.com.key;

    proxy_pass      172.20.11.188:3389;
}

改成这样还是不行!

4

image

3389 保留这一条,可以的。但多加一条3389换一个server_name就都不行了。加 ssl 也不行,证书确定是没问题的。

因为http那边配的证书和server_name是正常的。stream 这边不行。

@drawing @chobits 帮关注下!

7

image

3389 保留这一条,可以的。但多加一条3389换一个server_name就都不行了。加 ssl 也不行,证书确定是没问题的。

因为http那边配的证书和server_name是正常的。stream 这边不行。

@drawing @chobits 帮关注下!

请求是 ssl 的么,请求用什么方式发的?

5

image 3389 保留这一条,可以的。但多加一条3389换一个server_name就都不行了。加 ssl 也不行,证书确定是没问题的。 因为http那边配的证书和server_name是正常的。stream 这边不行。 @drawing @chobits 帮关注下!

请求是 ssl 的么,请求用什么方式发的?

远程桌面 mstsc。

3

远程桌面 mstsc。

这个是否ssl协议并携带sni呢?可以试下用openssl请求是否生效:openssl s_client -connect 127.0.0.1:3389 -servername lq.wanfeng-inc.com

7

远程桌面 mstsc。

这个是否ssl协议并携带sni呢?可以试下用openssl请求是否生效:openssl s_client -connect 127.0.0.1:3389 -servername lq.wanfeng-inc.com

方便加个V吗?tonycody