iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >Nginx使用stream模块分流实现端口复用
  • 120
分享到

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

nginx服务器https 2023-08-19 05:08:05 120人浏览 独家记忆
摘要

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

使用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

--结束END--

本文标题: Nginx使用stream模块分流实现端口复用

本文链接: https://www.lsjlt.com/news/375085.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Nginx使用stream模块分流实现端口复用
    使用Nginx复用端口有很多方法,最普遍的方法是在不同的server块中监听同一端口,根据不同的主机名完成分流。本文介绍了一种较新的端口复用方法,它可以方便地对TLS加密的TCP数据进行分流。 1 Nginx stream分流 Nginx...
    99+
    2023-08-19
    nginx 服务器 https
  • 使用nginx实现端口映射的教程
    这篇文章主要讲解了“使用nginx实现端口映射的教程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“使用nginx实现端口映射的教程”吧!考虑这样一个场景,我们部署了若干web应用在一台云服务...
    99+
    2023-06-04
  • 怎么使用Nginx实现端口转发TCP代理
    本篇内容介绍了“怎么使用Nginx实现端口转发TCP代理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!需求产生背景最近同事在测试和生产环境中...
    99+
    2023-06-22
  • Nginx使用Lua模块实现WAF的原理解析
    目录一、WAF产生的背景二、什么是WAF三、工作原理四、WAF作用五、WAF和传统防火墙的区别六、WAF和DDos七、Nginx WAF功能八、Nginx Waf防护流程九、基于Ng...
    99+
    2022-11-12
  • nginx使用内置模块配置限速限流的方法实例
    有时候 NGINX 面对一些特殊的场景时,需要进行一定的限速限流的配置,比如一个官网,可能前端静态文件是非常小的,但是同时配置的还有一些 apk 包,这些包如果不做任何限制,可能会形...
    99+
    2022-11-13
  • 使用Nginx实现端口转发TCP代理的实现示例
    目录需求产生背景为什么要使用Nginx实现使用Nginx实现端口转发安装依赖下载并安装启动并检查服务是否正常需求产生背景 最近同事在测试和生产环境中分别部署了一套应用,由于应用只能集...
    99+
    2022-11-12
  • PyHacker编写指南引用Nmap模块实现端口扫描器
    目录编写:调试扫描:方法扫描端口输出状态:引用Nmap库实现扫描功能,本节课比较简单一看就会。 编写环境:Python2.x 编写: 首先安装Nmap程序,并添加环境变量 pip i...
    99+
    2022-11-13
  • Node.js中如何使用readline模块实现终端输入
    本文小编为大家详细介绍“Node.js中如何使用readline模块实现终端输入”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node.js中如何使用readline模块实现终端输入”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-06-29
  • Nginx 黑魔法:使用 NGX-PHP 模块低成本实现高性能应用
    本篇文章分享一个和 Nginx 以及 PHP 有关的“黑魔法”:NGX-PHP 模块。通过这个方式,我们可以低成本的实现高性能应用,以及适合在服务器资源有限的情况下,同时体验到 Nginx 的高效以及...
    99+
    2023-09-18
    php nginx 服务器 docker ngx-php
  • Node.js使用http模块实现后台服务器流程解析
    目录客户端与服务器IP地址域名和域名服务器端口号什么是http模块创建基本的web服务器小结客户端与服务器 客户端 : 在网络节点中,负责消费资源的电脑,叫做客户端,例如:在网络中你...
    99+
    2022-11-13
  • Python使用re模块实现okenizer(表达式分词器)
    目录一个简单的tokenizer过滤tokens流注意子串匹配陷阱引用一个简单的tokenizer 分词(tokenization)任务是Python字符串处理中最为常见任务了。我们...
    99+
    2022-11-10
  • Python的Socket编程过程中实现UDP端口复用的实例分享
    关于端口复用 一个套接字不能同时绑定多个端口,如果客户端想绑定端口号,一定要调用发送信息函数之前绑定( bind )端口,因为在发送信息函数( sendto, 或 write ),系统会自动给当前网络程序分...
    99+
    2022-06-04
    端口 过程中 复用
  • 如何在python中使用scipy.stats模块实现正态分布
    这篇文章给大家介绍如何在python中使用scipy.stats模块实现正态分布,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python的scipy.stats模块是连续型随机变量的公共方法,可以产生随机数,通常是以...
    99+
    2023-06-06
  • Python使用tkinter模块实现GUI界面的学生信息管理系统流程分步详解
    本文只有代码,介绍了有关GUI界面的学生信息管理系统的实现。 已经过调试没有很大问题。 如有错误,还请批评指正。 1.导入tkinter模块 import tkinter as tk...
    99+
    2023-01-12
    Python学生信息管理系统 Python tkinter模块 学生信息管理
  • 在微信小程序中如何支持使用流模式(stream),打造ChatGPT实时回复机器人,最详细讲解。
    有开发过ChatGPT相关应用的都知道,小程序是不支持流式请求的,目前市面上大多数开发者的解决方案都是使用websocket来解决。 还有一部分开发者是小程序嵌套网页解决这个问题,前者对于我们软件销售型的团队来说,交付会很麻烦,而且问题也会...
    99+
    2023-09-09
    微信小程序 小程序
  • 使用Mockjs模拟接口实现增删改查、分页及多条件查询
    目录一、什么是Mock?二、使用Mock有什么好处三、安装Mock四、效果图五、使用Mock模拟接口实现增删改查、分页、多条件查询总结一、什么是Mock? mock官网 mock测试...
    99+
    2022-11-13
  • 如何使用Mockjs模拟接口实现增删改查、分页及多条件查询
    本篇内容主要讲解“如何使用Mockjs模拟接口实现增删改查、分页及多条件查询”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Mockjs模拟接口实现增删改查、分页及多条件查询”吧!一、什么...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作