Nginx的HTTP模块与Stream模块:区别与应用场景
本文分享自天翼云开发者社区《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模块:区别与应用场景的更多相关文章
- Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理
		
通过我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至 ...
 - nginx : TCP代理和负载均衡的stream模块
		
一直以来,Nginx 并不支持tcp协议,所以后台的一些基于TCP的业务就只能通过其他高可用负载软件来完成了,比如Haproxy. 这算是一个nginx比较明显的缺憾.不过,在1.90发布后这个认知将 ...
 - 编译nginx平滑添加stream模块
		
1.操作背景 操作系统版本:CentOS Linux release (Core) nginx版本:1.13.4 nginx从1.9.0版本开始,新增了ngx_stream_core_module模块 ...
 - nginx的stream模块和upstream模块
		
nginx7层调度方式 使用upstream模块定义集群名称和节点地址 定义在server字段之外httpd字段之内 upstream staticweb { server 172.17.0.2; # ...
 - 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 ...
 - 【01】Nginx:编译安装/动态添加模块
		
写在前面的话 说起 Nginx,别说运维,就是很多开发人员也很熟悉,毕竟如今已经 2019 年了,Apache 更多的要么成为了历史,要么成为了历史残留. 我们在提及 Nginx 的时候,一直在强调他 ...
 - Deepin15.11源码安装Nginx17.5包括stream模块和njs模块
		
一:先到官网下载nginx-1.17.5.tar.gz包并且解压到当前目录,解压后目录为:nginx-1.17.5: 二:下载njs源码(它没有像stream模块一样附带在了nginx源码里),因此首 ...
 - 循序渐进nginx(三):日志管理、http限流、https配置,http_rewrite模块,第三方模块安装,结语
		
目录 日志管理 access_log error_log 日志文件切割 自定义错误页 http访问限流 限制请求数 语法 使用 限制连接数 语法 测试 补充: https配置 使用 生成证书 配置ng ...
 - 内网Linux下安装Nginx1.23,添加stream模块实现tcp/udp代理转发
		
环境:centos7.6 ngx_stream_core_module 这个模块在1.9.0版本后将被启用.但是并不会默认安装,需要在编译时通过指定 --with-stream 参数来激活这个模块,w ...
 - 大熊君大话NodeJS之------Stream模块
		
一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现.比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流.流是可读,可写或兼具两者的. 最早接触Stream是从早期的un ...
 
随机推荐
- MySQL原理简介—8.MySQL并发事务处理
			
大纲 1.简单总结增删改SQL语句的实现原理 2.多个事务同时执行的场景遇到的问题 3.多个事务并发更新或查询时可能出现的问题 4.SQL标准中对事务的4个隔离级别 5.MySQL是如何支持4种事务隔 ...
 - Django之form表单的数据验证
			
1.先导入forms模块 from django import forms 2.创建模板的类 class loginform(forms.Form): # 2.模板中的元素 name = forms. ...
 - Three.js案例-360全景房看
			
在 360° 看房功能中,我们需要在浏览器中创建一个类似虚拟现实的场景,使得用户能够查看环境的每一个角落.这一功能的实现本质上是利用 球体映射技术,即通过将全景图作为纹理贴图映射到一个反向的球体上,用 ...
 - NVM管理多个Node版本
			
在项目中,我们常常会遇到node版本问题的一些报错,像是vue 3需要node10以上版本,不同的 node-sass 版本需要安装不同的 node.js 版本,为了统一管理node版本,我们需要用 ...
 - 常用 NoSQL 比较
			
Q: 请根据 CAP 实现程度,分布式实现方式,数据结构,查询方式,存储引擎等比较 mongodb, redis, cassandra, scylladb, dragonflydb, TiKV, co ...
 - rpc-java 生成代码路径设置
			
<plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf- ...
 - python 根据中文表头标题抓取动态(表格)文档数据
			
思路 如图左侧表头标题,要获得右侧数据.网页数据提取成汉字,表格数据间会有空格,用split()分隔成list.用index()查找某个汉字表头位置,输出list下一个位置既是要得到值 text2 = ...
 - Qt编写雷达模拟仿真工具(模拟点/歼击机/航母/发射导弹/爆炸效果/激光雷达等)
			
一.简单介绍 雷达模拟仿真工具,主要通过模拟点模拟相关物体,方位.航向角.距离.速度,并且显示相关详情信息可建立跟踪线建立与模拟点联系.可自定义更换模拟点背景达到更加逼真效果,如歼击机,航母发射导弹效 ...
 - FFmpeg命令行示例
			
1 提取视频流/音频流 // 分离视频流和音频流 ffmpeg -i input_file -vcodec copy -an output_file_video ffmpeg -i input_fil ...
 - OpenCV4.1.0与CUDAcuda_10.1.105联合进行图像特征点提取和特征匹配时,运行程序时错误提示:无法定位程序输入点?createBFMatchercv@DescriptorMatcher@cuda@cv......于动态链接库......
			
问题描述: OpenCV4.1.0与CUDAcuda_10.1.105联合进行图像特征点提取和特征匹配时,运行程序时错误提示:无法定位程序输入点?createBFMatchercv@Descripto ...