本文分享自天翼云开发者社区《Nginx的HTTP模块与Stream模块:区别与应用场景》,作者:云海

Nginx是一个多功能的开源Web服务器,它支持多个模块,其中两个重要的模块是HTTP模块和Stream模块。这两个模块在不同的网络场景中有各自的用途,本文将深入研究它们之间的区别以及何时应该使用哪一个。

HTTP模块和Stream模块的区别

工作原理

HTTP模块:HTTP模块主要用于处理HTTP和HTTPS流量。它可以接收HTTP请求、代理HTTP请求到后端服务器、负载均衡、缓存和处理HTTPS加密等。HTTP模块是Nginx最常用的模块之一,通常用于构建Web服务器或反向代理服务器。

Stream模块Stream模块用于处理通用TCP和UDP流量。它允许Nginx在传输层(TCP/UDP)上进行代理、负载均衡和流量控制。Stream模块通常用于构建TCP代理、数据库负载均衡、消息队列代理等应用。

优势与限制

HTTP模块的优势:

  • 处理HTTP请求和响应,适用于Web应用和网站。
  • 支持丰富的HTTP功能,如URL重写、反向代理、缓存等。
  • 支持HTTP/2、HTTP/3等现代HTTP协议,提供更快的性能。

HTTP模块的限制:

  • 不适用于通用TCP/UDP代理和流量控制。
  • 不支持非HTTP协议的流量。

Stream模块的优势:

  • 支持通用TCP和UDP代理,适用于多种应用。
  • 负载均衡和流量控制功能,可用于数据库、消息队列等场景。
  • 可以通过一台Nginx服务器代理多个后端服务。

Stream模块的限制:

  • 不支持HTTP特有功能,如URL重写和缓存。
  • 不处理应用层数据,只在传输层工作。

应用场景

选择使用HTTP模块还是Stream模块取决于您的具体需求和应用场景。

HTTP模块的应用场景:

  • 构建Web服务器或反向代理服务器,处理HTTP请求和响应。
  • 需要支持Web应用程序的高/级功能,如URL路由、重写规则、SSL终端等。
  • 需要处理HTTP/2或HTTP/3等现代HTTP协议的应用。

Stream模块的应用场景:

  • 构建通用TCP/UDP代理,用于代理数据库、消息队列等非HTTP应用。
  • 需要进行负载均衡和流量控制的场景,如数据库负载均衡。
  • 需要在传输层上处理数据的应用,不需要关心应用层协议。

结论

Nginx的Stream模块和HTTP模块各有其优势和限制,适用于不同的网络场景。了解它们之间的区别,并根据您的应用需求选择合适的模块,将有助于构建高效、可靠的网络服务。无论是构建Web服务器还是通用TCP/UDP代理,Nginx提供了强大的工具,以满足各种网络需求。

 

Nginx的HTTP模块与Stream模块:区别与应用场景的更多相关文章

  1. Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理

    通过我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至 ...

  2. nginx : TCP代理和负载均衡的stream模块

    一直以来,Nginx 并不支持tcp协议,所以后台的一些基于TCP的业务就只能通过其他高可用负载软件来完成了,比如Haproxy. 这算是一个nginx比较明显的缺憾.不过,在1.90发布后这个认知将 ...

  3. 编译nginx平滑添加stream模块

    1.操作背景 操作系统版本:CentOS Linux release (Core) nginx版本:1.13.4 nginx从1.9.0版本开始,新增了ngx_stream_core_module模块 ...

  4. nginx的stream模块和upstream模块

    nginx7层调度方式 使用upstream模块定义集群名称和节点地址 定义在server字段之外httpd字段之内 upstream staticweb { server 172.17.0.2; # ...

  5. Nginx解读内置非默认模块 ngx_http_stub_status_module

    1 Background http://nginx.org/en/docs/http/ngx_http_stub_status_module.html ngx_http_stub_status_mod ...

  6. 【01】Nginx:编译安装/动态添加模块

    写在前面的话 说起 Nginx,别说运维,就是很多开发人员也很熟悉,毕竟如今已经 2019 年了,Apache 更多的要么成为了历史,要么成为了历史残留. 我们在提及 Nginx 的时候,一直在强调他 ...

  7. Deepin15.11源码安装Nginx17.5包括stream模块和njs模块

    一:先到官网下载nginx-1.17.5.tar.gz包并且解压到当前目录,解压后目录为:nginx-1.17.5: 二:下载njs源码(它没有像stream模块一样附带在了nginx源码里),因此首 ...

  8. 循序渐进nginx(三):日志管理、http限流、https配置,http_rewrite模块,第三方模块安装,结语

    目录 日志管理 access_log error_log 日志文件切割 自定义错误页 http访问限流 限制请求数 语法 使用 限制连接数 语法 测试 补充: https配置 使用 生成证书 配置ng ...

  9. 内网Linux下安装Nginx1.23,添加stream模块实现tcp/udp代理转发

    环境:centos7.6 ngx_stream_core_module 这个模块在1.9.0版本后将被启用.但是并不会默认安装,需要在编译时通过指定 --with-stream 参数来激活这个模块,w ...

  10. 大熊君大话NodeJS之------Stream模块

    一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现.比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流.流是可读,可写或兼具两者的. 最早接触Stream是从早期的un ...

随机推荐

  1. MySQL原理简介—8.MySQL并发事务处理

    大纲 1.简单总结增删改SQL语句的实现原理 2.多个事务同时执行的场景遇到的问题 3.多个事务并发更新或查询时可能出现的问题 4.SQL标准中对事务的4个隔离级别 5.MySQL是如何支持4种事务隔 ...

  2. Django之form表单的数据验证

    1.先导入forms模块 from django import forms 2.创建模板的类 class loginform(forms.Form): # 2.模板中的元素 name = forms. ...

  3. Three.js案例-360全景房看

    在 360° 看房功能中,我们需要在浏览器中创建一个类似虚拟现实的场景,使得用户能够查看环境的每一个角落.这一功能的实现本质上是利用 球体映射技术,即通过将全景图作为纹理贴图映射到一个反向的球体上,用 ...

  4. NVM管理多个Node版本

    ​在项目中,我们常常会遇到node版本问题的一些报错,像是vue 3需要node10以上版本,不同的 node-sass 版本需要安装不同的 node.js 版本,为了统一管理node版本,我们需要用 ...

  5. 常用 NoSQL 比较

    Q: 请根据 CAP 实现程度,分布式实现方式,数据结构,查询方式,存储引擎等比较 mongodb, redis, cassandra, scylladb, dragonflydb, TiKV, co ...

  6. rpc-java 生成代码路径设置

    <plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf- ...

  7. python 根据中文表头标题抓取动态(表格)文档数据

    思路 如图左侧表头标题,要获得右侧数据.网页数据提取成汉字,表格数据间会有空格,用split()分隔成list.用index()查找某个汉字表头位置,输出list下一个位置既是要得到值 text2 = ...

  8. Qt编写雷达模拟仿真工具(模拟点/歼击机/航母/发射导弹/爆炸效果/激光雷达等)

    一.简单介绍 雷达模拟仿真工具,主要通过模拟点模拟相关物体,方位.航向角.距离.速度,并且显示相关详情信息可建立跟踪线建立与模拟点联系.可自定义更换模拟点背景达到更加逼真效果,如歼击机,航母发射导弹效 ...

  9. FFmpeg命令行示例

    1 提取视频流/音频流 // 分离视频流和音频流 ffmpeg -i input_file -vcodec copy -an output_file_video ffmpeg -i input_fil ...

  10. OpenCV4.1.0与CUDAcuda_10.1.105联合进行图像特征点提取和特征匹配时,运行程序时错误提示:无法定位程序输入点?createBFMatchercv@DescriptorMatcher@cuda@cv......于动态链接库......

    问题描述: OpenCV4.1.0与CUDAcuda_10.1.105联合进行图像特征点提取和特征匹配时,运行程序时错误提示:无法定位程序输入点?createBFMatchercv@Descripto ...