Ubuntu检查并启用 Nginx 的stream模块或重新安装支持stream模块的Nginx
stream 模块允许 Nginx 处理 TCP 和 UDP 流量,常用于负载均衡和端口转发等场景。本文将详细介绍如何检查 Nginx 是否支持 stream 模块,以及在需要时如何启用该模块。
1. 检查 Nginx 是否支持 stream 模块
首先,需要确认当前安装的 Nginx 是否已经编译并启用了 stream 模块。可以通过以下命令查看 Nginx 的编译参数:
nginx -V 2>&1 | grep -- '--with-stream'
• 有输出:表示 Nginx 已支持 stream 模块。
• 无输出:说明 Nginx 未编译 stream 模块,需要按照后续方法进行启用。
2. 启用 stream 模块的方法
如果当前 Nginx 不支持 stream 模块,可以选择以下几种方法之一来启用该模块。
方法 1:安装支持 stream 模块的官方 Nginx 版本
Ubuntu 的默认仓库可能不包含支持 stream 模块的 Nginx 版本。你可以通过添加 Nginx 官方仓库来安装支持 stream 模块的版本。
步骤 1:添加 Nginx 官方仓库
运行以下命令以添加 Nginx 官方 GPG 密钥和软件源:
sudo apt update
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
sudo apt update
步骤 2:安装 Nginx
安装最新版本的 Nginx:
sudo apt install nginx
步骤 3:验证 stream 模块
安装完成后,检查是否支持 stream 模块:
nginx -V 2>&1 | grep -- '--with-stream'
• 如果仍然不支持,可能需要安装特定版本的 Nginx(如 nginx-extras),请参考方法 3。
方法 2:重新编译 Nginx 以启用 stream 模块
如果官方仓库中的版本仍不支持 stream 模块,可以手动编译 Nginx 并启用所需模块。
步骤 1:安装编译依赖
确保系统已安装编译 Nginx 所需的依赖包:
sudo apt update
sudo apt install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g zlib1g-dev
步骤 2:下载 Nginx 源码
前往 Nginx 官方下载页面 获取最新版本的源码包,或者使用以下命令下载指定版本(以 1.25.3 为例):
wget https://nginx.org/download/nginx-1.25.3.tar.gz
tar -zxvf nginx-1.25.3.tar.gz
cd nginx-1.25.3
步骤 3:获取当前 Nginx 编译参数(可选)
如果你已经安装了 Nginx,可以获取当前的编译参数,以便在重新编译时保留这些配置:
nginx -V 2>&1 | grep -- '--add-module'
将输出的参数记录下来,稍后在重新编译时使用。
步骤 4:配置编译选项
运行 ./configure 脚本并添加 --with-stream 参数。如果需要保留现有的编译参数,可以将之前记录的参数一并添加。例如:
./configure --with-stream [其他参数]
示例(假设之前记录的参数为 --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf):
./configure --with-stream --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf
如果不确定其他参数,可以直接运行:
./configure --with-stream
步骤 5:编译并安装
编译源码并安装 Nginx:
make
sudo make install
步骤 6:验证安装
安装完成后,验证 stream 模块是否已启用:
nginx -V 2>&1 | grep -- '--with-stream'
• 有输出:表示 stream 模块已成功启用。
注意:手动编译安装的 Nginx 不会被系统的包管理器管理,建议备份原有配置并谨慎操作。
方法 3:使用 nginx-extras 包
某些 Linux 发行版的官方仓库提供了包含 stream 模块的 nginx-extras 包,可以简化安装过程。
步骤 1:安装 nginx-extras
运行以下命令安装 nginx-extras:
sudo apt update
sudo apt install nginx-extras
步骤 2:验证 stream 模块
安装完成后,检查 stream 模块是否启用:
nginx -V 2>&1 | grep -- '--with-stream'
• 有输出:表示 stream 模块已成功启用。
注意:nginx-extras 包含了额外的模块,可能会占用更多的系统资源。如果只需要 stream 模块,可以考虑其他方法以减少资源占用。
3. 配置 stream 模块示例
启用 stream 模块后,可以在 Nginx 配置文件中使用 stream 块来处理 TCP/UDP 流量。以下是一个简单的负载均衡配置示例:
stream {upstream backend {server backend1.example.com:12345;server backend2.example.com:12345;server backend3.example.com:12345;}server {listen 12345;proxy_pass backend;# 可选配置proxy_timeout 1h;proxy_connect_timeout 10s;}
}
配置说明
• upstream 块:定义了一组后端服务器,Nginx 将流量分发到这些服务器。
• server 块:监听指定的端口(如 12345),并将接收到的流量转发到 upstream 定义的后端服务器。
• 可选配置:
• proxy_timeout:设置代理连接的超时时间。
• proxy_connect_timeout:设置连接到后端服务器的超时时间。
4. 测试并重新加载 Nginx 配置
完成配置后,建议先测试配置文件的语法是否正确,再重新加载 Nginx 以应用更改。
测试配置文件
sudo nginx -t
预期输出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重新加载 Nginx
如果配置测试通过,重新加载 Nginx 以应用新配置:
sudo systemctl reload nginx
5. 常见问题排查
5.1 无法找到 stream 模块
• 确认安装方法:确保按照上述方法正确安装了支持 stream 模块的 Nginx 版本。
• 检查编译参数:使用 nginx -V 确认 --with-stream 参数已包含在编译选项中。
5.2 配置文件语法错误
• 详细错误信息:运行 nginx -t 查看具体的错误提示,根据提示修正配置文件中的问题。
• 日志查看:检查 Nginx 的错误日志获取更多信息,日志文件通常位于 /var/log/nginx/error.log。
5.3 权限问题
• 配置文件权限:确保 Nginx 配置文件的权限正确,通常应为 644,且所有者为 root。
• 目录权限:确保 Nginx 有权限访问配置中指定的目录和文件。
6. 总结
通过上述方法,你可以在 Ubuntu 系统上启用 Nginx 的 stream 模块,并利用其强大的流量处理能力来满足各种需求。选择合适的方法安装或编译 Nginx,确保配置文件的正确性,并定期监控和维护 Nginx 服务,以实现高效稳定的运行。
相关文章:
Ubuntu检查并启用 Nginx 的stream模块或重新安装支持stream模块的Nginx
stream 模块允许 Nginx 处理 TCP 和 UDP 流量,常用于负载均衡和端口转发等场景。本文将详细介绍如何检查 Nginx 是否支持 stream 模块,以及在需要时如何启用该模块。 1. 检查 Nginx 是否支持 stream 模块 首先,需要确认当前安装的 Nginx 是…...
HashMap添加元素的流程图
文章目录 JDK7 vs JDK8 的 HashMap 结构变化Java8 中哈希表的红黑树优化机制HashMap 添加元素的完整流程解析1. 计算 key 的哈希值并确定索引2. 检查该索引位置是否已有元素3. 处理哈希冲突4. 判断当前存储结构(链表还是红黑树)5. 判断链表长度是否超过 …...
(八)Set 的使用
Set 的使用 Set 的特点 主要功能:去除重复内容。特性:无序且不支持重复的集合,不能通过索引访问元素。 示例代码 void main() {// 创建一个包含重复元素的列表List<String> fruits [香蕉, 苹果, 西瓜, 香蕉, 苹果, 香蕉, 苹果];//…...
Spring Boot 集成 Kafka 消息发送方案
一、引言 在 Spring Boot 项目中,Kafka 是常用的消息队列,可实现高效的消息传递。本文介绍三种在 Spring Boot 中使用 Kafka 发送消息的方式,分析各自优缺点,并给出对应的 pom.xml 依赖。 二、依赖引入 在 pom.xml 中添加以下依赖: <dependencies><!-- Sprin…...
面向医药仓储场景下的药品分拣控制策略方法 研究(大纲)
面向医药仓储场景下的药品分拣控制策略方法研究 基于多机器人协同与智能调度的分拣系统设计 第一章 绪论 1.1 研究背景与意义 医药仓储自动化需求: 人工分拣效率低、出错率高(如药品批次混淆、过期风险)温控药品(如疫苗、生物制…...
AI大模型介绍
大模型介绍 大模型是指具有大规模参数和复杂计算结构的机器学习模型,通常由深度神经网络构建而成,拥有数十亿甚至数千亿个参数 开发大模型不是从0开始,是建立在已有的大模型基座模型上做开发,构建企业知识库(向量数据库…...
Python日期时间向前向后N个月及对应月初和月末
Python日期和时间的计算主要使用自带的datetime和calendar库,部分需要借助第三方dateutil库。下面具体说明时间的加减运算,月份的起始和结束日期,向前向后移动的时间间隔等,代码如下: from datetime import date, dat…...
OpenPCDet详细部署与复现
OpenPCDet简介 OpenPCDet是一个用于3D目标检测的开源工具箱,它提供了多种数据集的加载器,支持多种模型,并且易于扩展。 本人使用硬件与环境 Linux操作系统(Ubuntu20.04) Python环境(Anaconda下独立创建&…...
同旺科技USB to I2C 适配器 ---- 指令之间延时功能
所需设备: 内附链接 1、同旺科技USB to I2C 适配器 1、指令之间需要延时发送怎么办?循环过程需要延时怎么办?如何定时发送?现在这些都可以轻松解决; 2、只要在 “发送数据” 栏的Delay单元格里面输入相应的延迟时间就…...
网络华为HCIA+HCIP NFV
目录 NFV关键技术:虚拟化 NFV关键技术:云化 NFV架构 NFV标准架构 编辑 NFV架构功能模块 NFV架构接口 NFV关键技术:虚拟化 在NFV的道路上,虚拟化是基础,云化是关键。传统电信网络中,各个网元都是…...
MySQL0基础学习记录-下载与安装
下载 下载地址: (Windows)https://dev.mysql.com/downloads/file/?id536787 安装 直接点next,出现: 点execute 然后一直next到这页: next 然后需要给root设置一个密码: 在next。。很多页…...
【万字总结】前端全方位性能优化指南(五)——HTTP/3+QUIC、0-RTT会话恢复、智能压缩决策树
前言 在5G与边缘计算重塑网络格局的今天,传统TCP协议已成为性能跃迁的最后瓶颈。HTTP/3凭借QUIC协议实现传输层革新,通过UDP多路复用+零RTT握手,在弱网环境下仍可保持90%以上的传输效率,头部企业实测首屏加载时间降低40%。本章聚焦三大突破性实践:从Nginx/K8s集群的HTTP/3…...
集成学习(下):Stacking集成方法
一、Stacking的元学习革命 1.1 概念 Stacking(堆叠法) 是一种集成学习技术,通过组合多个基学习器(base learner)的预测结果,并利用一个元模型(meta-model)进行二次训练,…...
centos 7 搭建FTP user-list用户列表
在 CentOS 7 上搭建基于 user_list 的 FTP 用户列表,你可以按以下步骤操作: 1. 安装 vsftpd 服务 若还未安装 vsftpd,可以使用以下命令进行安装: bash yum install -y vsftpd2. 启动并设置开机自启 vsftpd 服务 bash systemctl…...
CUDA编程面试高频30题
1. 什么是CUDA?它与GPU的关系是什么? 答: CUDA(Compute Unified Device Architecture)是由NVIDIA开发的一种并行计算平台和应用程序接口模型。它允许开发者利用NVIDIA GPU进行通用计算任务,而不仅仅是图形渲染。CUDA提…...
PageHelper插件依赖引入不报错,但用不了
情况: 父模块pom. Xml 引入1. 4. 0以上版本的pagehelper-spring-boot-starter。 要用到插件的子模块,去掉版本号,引入和父模块一样的依赖。 引入成功,没有报错,但是打开右边的maven里面没有找到PageHelper插件。 终端清空并重…...
背包问题——动态规划的经典问题包括01背包问题和完全背包问题
01背包问题:给你多个物品每个物品只能选一次,要你在不超过背包容积(或者恰好等于)的情况下选择装价值最大的组合。如果没有动态规划的基础其实是很难理解这个问题的,所以看这篇文章之前先去学习一下动态规划的基本思想…...
MyBatis 面试专题
MyBatis 面试专题 基础概念MyBatis中的工作原理MyBatis 与 Hibernate 的区别?#{} 和 ${} 的区别?MyBatis 的核心组件有哪些? 映射与配置如何传递多个参数?ResultMap 的作用是什么?动态 SQL 常用标签有哪些?…...
Animation - AI Controller控制SKM_Manny的一些问题
一些学习笔记归档; 在UE5中,使用新的小白人骨骼:SKM_Manny,会跟UE4中的小白人有一些差别; 比如在用AI Controller控制使用该骨骼(配置默认的ABP_Manny Animation BP)角色的时候,需要…...
安科瑞新能源防逆流解决方案:守护电网安全,赋能绿色能源利用
随着光伏、储能等新能源在用户侧的快速普及,如何避免电力逆流对电网造成冲击,成为行业关注的焦点。安科瑞凭借技术实力与丰富的产品矩阵,推出多场景新能源防逆流解决方案,以智能化手段助力用户实现安全、经济的能源管理࿰…...
filebeat和logstash区别
Filebeat 角色: 轻量级日志收集器。 功能: 从指定的日志文件中读取日志数据。 可以从多个源(如文件、系统日志、容器日志等)收集日志。 将收集到的日志数据传输到 Logstash、Elasticsearch 或其他支持的输出端点。 性能: 由于是轻量级的,File…...
【一起学Rust | Tauri2.0框架】基于 Rust 与 Tauri 2.0 框架实现全局状态管理
前言 在现代应用程序开发中,状态管理是构建复杂且可维护应用的关键。随着应用程序规模的增长,组件之间共享和同步状态变得越来越具有挑战性。如果处理不当,状态管理可能会导致代码混乱、难以调试,并最终影响应用程序的性能和可扩…...
扩散模型算法实战——三维重建的应用
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 引言 三维重建是计算机视觉和图形学中的一个重要研究方向,旨在从二维图像或其他传感器数据中恢复…...
社群经济4.0时代:开源链动模式与AI技术驱动的电商生态重构
摘要:在Web3.0技术浪潮与私域流量红利的双重驱动下,电商行业正经历从"流量收割"到"用户深耕"的范式转变。本文基于社群经济理论框架,结合"开源链动21模式"、AI智能名片、S2B2C商城小程序源码等创新工具&#x…...
【Linux系统】进程等待:告别僵尸进程深入理解Linux进程同步的核心密码
Linux系列 文章目录 Linux系列前言一、进程等待的核心目的二、进程等待的实现方式2.1 wait()函数2.2 waitpid()函数 总结 前言 在Linux系统中,进程等待(Process Waiting)是多进程编程中的核心机制,指父进程…...
根据文件名称查询文件所在位置
在 Linux 中,根据文件名称查询文件所在位置主要通过命令行工具实现,以下是几种常用方法: --- ### **1. 使用 find 命令(最灵活)** find 命令可以递归搜索指定目录下的文件,支持按名称、类型、时间等条件过…...
六十天前端强化训练之第二十五天之组件生命周期大师级详解(Vue3 Composition API 版)
欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗,谢谢大佬! 目录 一、生命周期核心知识 1.1 生命周期全景图 1.2 生命周期钩子详解 1.2.1 初始化阶段 1.2.2 挂载阶段 1.2.3 更新阶段 1.2.4 卸载阶段 1.3 生命周期执行顺序 1.4 父子组…...
Pytorch使用手册(专题五十)—自定义运算符
1. PyTorch 自定义运算符 PyTorch 提供了一个庞大的运算符库,这些运算符可以对张量进行操作(例如 torch.add、torch.sum 等)。然而,您可能希望向 PyTorch 引入一个新的自定义操作,并使其能够与诸如 torch.compile、autograd 和 torch.vmap 等子系统协同工作。为此,您必须…...
springboot整合mybatis-plus(保姆教学) 及搭建项目
一、Spring整合MyBatis (1)将MyBatis的DataSource交给Spring IoC容器创建并管理,使用第三方数据库连接池(Druid,C3P0等)代替MyBatis内置的数据库连接池 (2)将MyBatis的SqlSessionFactory交给Spring IoC容器创建并管理,使用spring-mybatis整…...
VSCode创建VUE项目(三)使用axios调用后台服务
1. 安装axios,执行命令 npm install axios 2. 在 main.ts 中引入并全局挂载 Axios 实例 修改后的 代码(也可以单独建一个页面处理Axios相关信息等,然后全局进行挂载) import { createApp } from vue import App from ./App.vue import rou…...
