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

这篇具有很好参考价值的文章主要介绍了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://www.toymoban.com/news/detail-526418.html

到了这里,关于Nginx使用stream模块分流实现端口复用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nginx配置stream模块TCP代理

    nginx安装–with-stream模块 nginx -V确保nginx安装了–with-stream如果没有,重新用安装nginx 安装 安装所有modules vi nginx.conf顶部加一行 nginx.conf配置 测试TCP代理,链接mysql:

    2024年02月21日
    浏览(40)
  • Linux下nginx添加stream模块支持Tcp转发

    方式1 yum直接安装 安装nginx 安装模块 添加转发配置 /etc/nginx/nginx.conf底部添加 运行测试 方式2 源码编译 一、安装编译工具 二、安装PCRE PCRE (Perl Compatible Regular Expressions) 是一个用于处理正则表达式的库,它是一个C语言的库,可以在多种编程语言中使用。PCRE库提供了一套API来编

    2024年04月28日
    浏览(50)
  • 实战指南:使用 Nginx 反向代理实现多端口跳转

    在现代 Web 开发中,Nginx作为一款高性能的开源反向代理服务器,提供了强大的功能来管理网络流量和路由。本文将介绍如何利用 Nginx 的反向代理功能,将不同路径的请求转发到不同端口的 Tomcat 服务上,以实现多端口跳转的效果。 使用 Nginx 的强大反向代理功能,我们能够根

    2024年02月19日
    浏览(50)
  • Nginx通过SplitClient进行AB测试以及负载均衡分流

    Nginx 是一个被广泛应用的 Web服务中间件 ,今天分享一下如何用它做 AB 测试。大致可以通过以下方式实现。 1.根据url参数进行 AB测试 : Nginx 可以根据请求的 url 参数来处理请求,例如针对不同的 url 参数返回不同的页面版本,从而实现AB测试。 2.使用 nginx-lua 模块进行 AB 测试

    2024年02月07日
    浏览(38)
  • Nginx 实现端口转发

    首先我们需要找到服务器部署的nginx的配置文件nginx.conf: 找到如下代码段实现配置端口转发 其中有几个配置,我们一个一个讲: 表示你该配置的server所监听的端口号。 用于设置虚拟主机服务名称,如:127.0.0.1 、 localhost 、域名 例如,在windows本地主机上进行修改该配置,则

    2023年04月18日
    浏览(46)
  • 使用nginx实现自定义大小预览缩略图,http_image_filter模块的安装使用

    本预览图功能使用的是nginx的http_image_filter模块,可以自定义缓存大小解决占用服务器容量问题,建议配合fastDFS使用 http_image_filter不会改变图片原始比例 例如原始图片尺寸为16:9,那么输入宽高值之后会以较小的一个参数展现预览图,比如原始图为1600*900,传递参数320*90会拿到

    2023年04月24日
    浏览(38)
  • 关于nginx进行端口转发的实现浅谈

    本文主要介绍了nginx进行端口转发的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着微点阅读小编来一起学习学习吧 1、内网有一台服务器的端口需要映射到外网(举例外网的服务器申请了一个域名,然后给该

    2024年02月09日
    浏览(40)
  • 利用nginx/apache代理wss 实现 小程序 端口 反向代理

    除了用Workerman自身的SSL,也可以利用nginx/apache作为wss代理转发给workerman 我就是栽在这大坑里(nginx/apache代理wss,workerman部分就不要设置ssl,否则将无法连接,两个方法2选1)官方推荐用nginx/apache代理wss 如果是微信小程序,要添加合法域名 格式:wss://域名 结尾不要加/,可以:端

    2024年02月12日
    浏览(45)
  • docker中使用nginx配置ssl证书,443端口无法连接

    环境:docker + 云服务器+域名 准备:下载ssl证书文件,安全组开放443端口, nginx容器映射443端口 (切记!!!我就是这里忘记配置, 结果弄了好久); 如果上面操作都做好了,在nginx也配置了,但是还是有问题,那么就是你的nginx没有映射443端口,博主这里就是踩了这个坑,话不多说

    2024年02月07日
    浏览(47)
  • Nginx+cpolar实现内网穿透多个Windows Web站点端口

    1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目录双击Nginx.exe即可运行 打开浏览器输入http://localhost ,nginx默认使用80端口,所以无需加端口号.出现nginx欢迎页面表示启动成功 2. 配置Nginx 在8086,和9999端口分别配置两个web服务

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包