谷姐:我们都是谷歌迷
We are all Google fans

求助,NGINX反代与stream模块如何共用443端口。-squalll

Rate this post

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;
}

热议
2楼 hanada 昨天21:36

stream监听443端口,没有匹配到规则的域名转发到本地10443端口(10443只是示例),10443提供反向代理服务

3楼 squalll 昨天21:38

stream监听443端口,没有匹配到规则的域名转发到本地10443端口(10443只是示例),10443提供反向代理服务 ...

嗯,我也刚想到了这个方法。不知道还需不需要什么端口复用之类的,感觉有点复杂,研究中

4楼 hanada 昨天21:41

嗯,我也刚想到了这个方法。不知道还需不需要什么端口复用之类的,感觉有点复杂,研究中 ...

stream匹配不上的都fallback到127.0.0.1:10443就好了啊,http块的server都用10443端口监听,10443就是http模块管理的,可以多域名,不想被fallback到不存在的域名的话可以在http块下也加个默认server来拒绝匹配不上的域名请求

5楼 squalll 昨天22:06

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等,全都没结果啊。。。能告知下吗

6楼 hanada 昨天23:00

# 如果没有匹配到任何规则,则默认为一个 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;
}

7楼 squalll 昨天23:27

你多了个.吧。。。还有就是这里没啥特殊符号,没必要外面加双引号的。还有你下面server块有:443,这样就 ...

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

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

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

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

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

8楼 hanada 昨天23:57

那你就把端口号也放上去吧
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;
}

9楼 squalll 9小时前

终于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而在上方源分别自定义端口就好了

10楼 squalll 8小时前

额。。。现在才看见你的回复。。。

谢谢大佬,提点这么多

申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。

未经谷姐允许不得转载:谷姐靓号网 » 求助,NGINX反代与stream模块如何共用443端口。-squalll
分享到: 生成海报

热门文章

评论 抢沙发

评论前必须登录!

立即登录   注册

买Google Voice认准【谷姐靓号网】

Google Voice靓号列表Google Voice自助购买
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活