全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1777|回复: 9

[nginx] 求助,NGINX反代与stream模块如何共用443端口。

[复制链接]
发表于 2023-1-7 21:24:32 | 显示全部楼层 |阅读模式




stream模块如下:





问题:一但加入这个443,我的另一组普通        location / {        反代443站点就打不开了,这个stream的sni反代是可以的。不换端口的情况下,可不可以两组共存呢?











stream {







# 加一组 map,根据规则过滤 $ssl_preread_server_name (也就是请求的 SNI)
    # 将过滤过的 SNI 存入自定义变量 $filtered_sni_name,
    # 如果没有匹配到任何规则,则默认为一个 443 端口没有服务的本地回环。
    map $ssl_preread_server_name $filtered_sni_name {
        ~^(.*|)netflix\.com$ $ssl_preread_server_name;
        ~^(.*|)netflix\.net$ $ssl_preread_server_name;
        ~^(.*|)nflximg\.com$ $ssl_preread_server_name;
        ~^(.*|)nflximg\.net$ $ssl_preread_server_name;
        ~^(.*|)nflxvideo\.net$ $ssl_preread_server_name;
        ~^(.*|)nflxext\.com$ $ssl_preread_server_name;
        ~^(.*|)nflxso\.net$ $ssl_preread_server_name;
        ~^(.*|)fast\.com$ $ssl_preread_server_name;
        default "127.255.255.255";
    }

    server {
        resolver 1.1.1.1;
        listen 443;
        ssl_preread on;
        # 只代理经过 SNI 过滤的流量,
        # 其他流量都被丢入不存在的地址
        proxy_pass $filtered_sni_name:443;
    }
发表于 2023-1-7 21:36:11 | 显示全部楼层
stream监听443端口,没有匹配到规则的域名转发到本地10443端口(10443只是示例),10443提供反向代理服务
 楼主| 发表于 2023-1-7 21:38:26 | 显示全部楼层
hanada 发表于 2023-1-7 21:36
stream监听443端口,没有匹配到规则的域名转发到本地10443端口(10443只是示例),10443提供反向代理服务 ...

嗯,我也刚想到了这个方法。不知道还需不需要什么端口复用之类的,感觉有点复杂,研究中
发表于 2023-1-7 21:41:23 | 显示全部楼层
squalll 发表于 2023-1-7 21:38
嗯,我也刚想到了这个方法。不知道还需不需要什么端口复用之类的,感觉有点复杂,研究中 ...

stream匹配不上的都fallback到127.0.0.1:10443就好了啊,http块的server都用10443端口监听,10443就是http模块管理的,可以多域名,不想被fallback到不存在的域名的话可以在http块下也加个默认server来拒绝匹配不上的域名请求
 楼主| 发表于 2023-1-7 22:06:52 | 显示全部楼层
本帖最后由 squalll 于 2023-1-7 22:12 编辑
hanada 发表于 2023-1-7 21:41
stream匹配不上的都fallback到127.0.0.1:10443就好了啊,http块的server都用10443端口监听,10443就是htt ...


    # 如果没有匹配到任何规则,则默认为一个 443 端口没有服务的本地回环。
    map $ssl_preread_server_name $filtered_sni_name {
   
        ~^(.*|)netflix\.com$ $ssl_preread_server_name;
        ~^(.*|)netflix\.net$ $ssl_preread_server_name;
        ~^(.*|)nflximg\.com$ $ssl_preread_server_name;
        ~^(.*|)nflximg\.net$ $ssl_preread_server_name;
        ~^(.*|)nflxvideo\.net$ $ssl_preread_server_name;
        ~^(.*|)nflxext\.com$ $ssl_preread_server_name;
        ~^(.*|)nflxso\.net$ $ssl_preread_server_name;
        ~^(.*|)fast\.com$ $ssl_preread_server_name;
        


        
        
       default "127..0.0.1:444";
    }




老大能帮看看嘛,我这样写,好像不行。444端口肯定是没问题的(调成443就可以访问)

他那个map我不太熟,不知道如何写“否则”,是不是就是那个default?可是default改成127.0.0.1:444还是不行。(但是这个location我改443就可以访问)

看到你的回复 百度了NGINX fallback参数以及NGINX SNI fallback等,全都没结果啊。。。能告知下吗
发表于 2023-1-7 23:00:40 | 显示全部楼层
本帖最后由 hanada 于 2023-1-7 23:03 编辑
squalll 发表于 2023-1-7 22:06
# 如果没有匹配到任何规则,则默认为一个 443 端口没有服务的本地回环。
    map $ssl_preread_serve ...


你多了个.吧。。。还有就是这里没啥特殊符号,没必要外面加双引号的。还有你下面server块有:443,这样就变成了127.0.0.1:444:443了,当然访问不来哦,可以443去掉,https协议默认就是443

server {
        resolver 1.1.1.1;
        listen 443;
        ssl_preread on;
        proxy_pass $filtered_sni_name;
    }
 楼主| 发表于 2023-1-7 23:27:26 | 显示全部楼层
hanada 发表于 2023-1-7 23:00
你多了个.吧。。。还有就是这里没啥特殊符号,没必要外面加双引号的。还有你下面server块有:443,这样就 ...

不是多个.的问题,刚才那属于笔误
好像问题就在你说的443这上面。

之前情况:
本地内部页面使用其他端口,比如1443
SNI使用443

        proxy_pass $filtered_sni_name:443;
结果就是之前那样,只有外部SNI的奈飞能打开
而内部各种打不开,折腾一晚上了,毫无变化

按照您说的:
        proxy_pass $filtered_sni_name;去掉443
终于有些变化了,成了本地打的开,奈飞打不开了。。。。。


似乎问题就在这上,但是如何修改才能俩都打得开呢,不过你的思路是非常对的,问题就在俩人端口不一样上。。。。。

发表于 2023-1-7 23:57:13 | 显示全部楼层
那你就把端口号也放上去吧
map $ssl_preread_server_name $filtered_sni_name {
   
        ~^(.*|)netflix\.com$ $ssl_preread_server_name:443;
        ~^(.*|)netflix\.net$ $ssl_preread_server_name:443;
        ~^(.*|)nflximg\.com$ $ssl_preread_server_name:443;
        ~^(.*|)nflximg\.net$ $ssl_preread_server_name:443;
        ~^(.*|)nflxvideo\.net$ $ssl_preread_server_name:443;
        ~^(.*|)nflxext\.com$ $ssl_preread_server_name:443;
        ~^(.*|)nflxso\.net$ $ssl_preread_server_name:443;
        ~^(.*|)fast\.com$ $ssl_preread_server_name:443;
       default 127.0.0.1:444;
    }
 楼主| 发表于 2023-1-8 00:05:23 | 显示全部楼层
本帖最后由 squalll 于 2023-1-8 00:07 编辑

终于2个都通了。

跑去看官方ngx_stream_ssl_preread_module模块例子,发现他每个
后端都写了端口。
而我试图在本地监听正常而奈飞异常情况下
修改
~^(.*|)netflix\.com$ $ssl_preread_server_name;

~^(.*|)netflix\.com$ $ssl_preread_server_name:443;
终于解决了。

所以你的问题是对的,就是端口重复了。而下面写死了443,就肯定是127.0.0.1:1443:443而在上方源分别自定义端口就好了
 楼主| 发表于 2023-1-8 00:08:05 | 显示全部楼层
额。。。现在才看见你的回复。。。


谢谢大佬,提点这么多
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-5 17:58 , Processed in 0.067102 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表