我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Nginx使用stream模块分流实现端口复用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Nginx使用stream模块分流实现端口复用

使用Nginx复用端口有很多方法,最普遍的方法是在不同的server块中监听同一端口,根据不同的主机名完成分流。本文介绍了一种较新的端口复用方法,它可以方便地对TLS加密的TCP数据进行分流。

1 Nginx stream分流

Nginx一般都工作在应用层,可以通过多个虚拟主机对端口的监听实现分流。其实,Nginx在1.0.9版本以后增加了stream模块,它利用SNI协议(TLS的扩展协议)对同一端口的不同主机转发流量,这一转发过程在传输层完成。

2 分流示例

下面展示了一个stream分流的实例,它根据不同的域名(capa.ink和crps.ink),将请求转发到不同的服务(web1和web2),实现了443端口的复用。

注意,请确保你的nginx中包含stream模块,否则请重新编译安装!

下面展示了stream块的配置方法(位于nginx.conf)。注意stream块与http块并列。

stream {    map $ssl_preread_server_name $stream_map {        capa.ink web1;        crps.ink web2;    }    upstream web1 {        server 127.0.0.1:8000;    }    upstream web2 {        server 127.0.0.1:8001;    }        #复用443端口    server {        listen 443 reuseport;        listen [::]:443 reuseport;        proxy_pass $stream_map;        ssl_preread on;    #重点,一定要加这句    }}

此时,nginx应该已经可以根据域名分别将请求分流到8000或8001端口了,我们在配置server块时即可直接监听这个端口。

以下代码展示了一个完整的基于php的网页的配置方案,它对应着上面配置中的"web1"服务,我们只需关心server块中前三行内容。由于该域名的请求已经由stream模块转向8000端口,所以在这里只需要监听8000端口即可。

server {        listen 8000 ssl http2;        server_name capa.ink;        port_in_redirect off;        ssl_certificate /document/mywebsite/certification/capa.ink_bundle.pem;        ssl_certificate_key /document/mywebsite/certification/capa.ink.key;        ssl_session_timeout 5m;        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;        ssl_prefer_server_ciphers on;        root /document/mywebsite;        index index.php;        if (!-e $request_filename) {                rewrite ^(.*)$ /index.php$1 last;        }        location ~ .*\.php(\/.*)*$ {                root           /document/mywebsite;                fastcgi_split_path_info ^(.+?.php)(/.*)$;                fastcgi_pass    127.0.0.1:9005;                fastcgi_index   index.php;                fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;                include         fastcgi_params;    }}

3 总结

在Nginx中,用stream块复用端口,与用server块复用端口的区别在于,stream块在传输层就完成了域名的传输,并完成分流;而server块在应用层才读取数据中包含的域名信息,再进行分流。stream可以在加密传输的情况下很方便地复用端口,如果要处理非加密的http协议,那么传统的server块完全能够胜任。

来源地址:https://blog.csdn.net/diqiudq/article/details/126907193

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Nginx使用stream模块分流实现端口复用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Nginx使用stream模块分流实现端口复用

使用Nginx复用端口有很多方法,最普遍的方法是在不同的server块中监听同一端口,根据不同的主机名完成分流。本文介绍了一种较新的端口复用方法,它可以方便地对TLS加密的TCP数据进行分流。 1 Nginx stream分流 Nginx
2023-08-19

使用nginx实现端口映射的教程

这篇文章主要讲解了“使用nginx实现端口映射的教程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“使用nginx实现端口映射的教程”吧!考虑这样一个场景,我们部署了若干web应用在一台云服务
2023-06-04

使用Nginx反向代理实现多端口跳转的实战分享

通过使用Nginx反向代理,你可以实现多端口跳转,优化服务器架构。文章提供详细的配置步骤,包括虚拟主机配置、"server"和"location"指令的使用。还涵盖了故障排查技巧,如语法检查和日志分析。此外,文章介绍了性能优化方法,例如合理设置工作进程、启用Gzip压缩和使用CDN。示例配置文件展示了如何将流量转发到不同的后端服务。遵循本指南,你可以轻松部署Nginx多端口跳转服务,提高可用性和性能。
使用Nginx反向代理实现多端口跳转的实战分享
2024-04-02

怎么使用Nginx实现端口转发TCP代理

本篇内容介绍了“怎么使用Nginx实现端口转发TCP代理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!需求产生背景最近同事在测试和生产环境中
2023-06-22

Node.js中如何使用readline模块实现终端输入

本文小编为大家详细介绍“Node.js中如何使用readline模块实现终端输入”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node.js中如何使用readline模块实现终端输入”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一
2023-06-29

如何在python中使用scipy.stats模块实现正态分布

这篇文章给大家介绍如何在python中使用scipy.stats模块实现正态分布,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python的scipy.stats模块是连续型随机变量的公共方法,可以产生随机数,通常是以
2023-06-06

Python的Socket编程过程中实现UDP端口复用的实例分享

关于端口复用 一个套接字不能同时绑定多个端口,如果客户端想绑定端口号,一定要调用发送信息函数之前绑定( bind )端口,因为在发送信息函数( sendto, 或 write ),系统会自动给当前网络程序分配一个随机端口号,这相当于随机绑定
2022-06-04

Python使用tkinter模块实现GUI界面的学生信息管理系统流程分步详解

这篇文章主要为大家详细介绍了python实现简易学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2023-01-12

如何使用Mockjs模拟接口实现增删改查、分页及多条件查询

本篇内容主要讲解“如何使用Mockjs模拟接口实现增删改查、分页及多条件查询”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Mockjs模拟接口实现增删改查、分页及多条件查询”吧!一、什么
2023-06-30

编程热搜

目录