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 ...
随机推荐
- windows 中 gvim 和 git-bash vim 的 vimrc 路径相关配置记录
windows 中 gvim 和 git-bash vim 的 vimrc 路径相关配置记录 Git-bash 中的 vim 将 source ~/.vimrc 或 ~/.vim/vimrc 并且不关 ...
- lua获取请求参数以及在nginx.conf中使用
-- 获取请求路径 local request_uri = ngx.var.request_uri -- 从 header中取值 local token = ngx.req.get_headers() ...
- []JSR 133 (Java Memory Model) FAQ
JSR 133 (Java Memory Model) FAQ Jeremy Manson and Brian Goetz, February 2004 内容列表 究竟什么是内存模型? 其它语言,像C ...
- memcached 和 Grails,第 1 部分:安装和使用 memcached
学习 memcached 命令并评估缓存性能 本文是系列文章的第 1 部分,主要介绍 memcached 和 Grails.作者 James Goodwill 将向您介绍开源解决方案 memcache ...
- Codeforces Round 887 (Div. 2)
C. Ntarsis' Set (\(1 \leq n,k \leq 2 \cdot 10^5\)) 题解:思维 + 二分 我们不妨反向考虑 由于答案最后一次一定在第一个位置 所以答案上一轮一定在 ...
- .NET Core 锁(Lock)底层原理浅谈
CPU原子操作 原子操作,指一段逻辑要么全部成功,要么全部失败.概念上类似数据库事物(Transaction). CPU能够保证单条汇编的原子性,但不保证多条汇编的原子性 那么在这种情况下,那么CPU ...
- C# 学习笔记 0415
关于零碎的知识笔记总结,你可能需要知道的 一.Linq相关 Find()和First()与FirstOrDefault Find方法只能在List上使用,而后者能更广泛应用在IEnemerable上. ...
- 树莓派设置CPU运行的核心数为3,保留核心4号
具体步骤:1.打开终端,输入 sudo nano /boot/cmdline.txt2.在第一行最后空一格加上isolcpus=33.保存
- 【分块】LibreOJ 6280 数列分块入门4
题目 https://loj.ac/p/6280 题解 将 \(n\) 个元素的数组 \(a\) 按块长 \(\sqrt{n}\) 进行分块处理.为每个块设置两个懒添加标记 \(add[i], sum ...
- 鸿蒙应用开发从入门到入行 - 篇2:HarmonyOS开发快速基础入门
鸿蒙应用开发从入门到入行 第二天 - 开发工具与基础组件 导读:在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用.ArkUI里的基础组件,并通过制作一个简单界面掌握使用 鸿蒙开发工具 - De ...