经过和AI的共同努力 零基础 开发 请大家轻喷!
Markdown
Nginx Stream Manager (NSM)
Version License OS Compatibility
NSM 是一款高效、可靠的 Shell 脚本工具,专注于简化 Linux 环境下 Nginx Stream 模块(四层代理)的配置与管理。实现高性能的 TCP/UDP 端口转发和基于 SNI 的智能代理。🚀 核心功能
端口转发: 轻松设置 TCP 和 UDP 端口转发到目标 IP 和端口。SSL 预读 (SNI 路由): 利用 Nginx 的 ssl_preread 功能,根据客户端请求的域名(SNI)自动将流量路由到不同的后端服务器,完美解决单端口多服务问题。配置管理: 自动添加、修改和删除 Stream 代理规则。服务控制: 一键重启/重载 Nginx 服务以应用配置。环境自检: 部署脚本包含智能检测,自动安装 Stream 模块并清理配置冲突。📋 兼容性要求
本脚本要求您的系统满足以下条件:
操作系统: 兼容主流 Linux 发行版 (Debian 10+, Ubuntu 18.04+, CentOS 7+)。权限: 必须以 root 用户或具有 sudo 权限的用户运行。核心组件: curl, nginx, sudo 等(已包含在部署脚本中)。🛠️ 一键部署 (推荐)
我们推荐使用一键部署脚本,它将自动安装所有依赖(包括 Nginx Stream 模块)、下载管理脚本并设置 nsm 命令。您无需担心 Stream 模块缺失或配置冲突问题。
确保在 Debian/Ubuntu/CentOS 系统上以 root 或 sudo 权限运行
sudo curl -fsSL https://raw.githubusercontent.com/pansir0290/nginx-stream-manager/main/deploy.sh | bash
【重要】部署完成后,请执行此命令使 'nsm' 别名生效
source ~/.bashrc # 或 source /root/.bashrc
💡 手动安装依赖(如果一键部署失败)
如果您的系统环境特殊,可以手动安装依赖:
对于 Debian/Ubuntu 系统:
Bash
sudo apt update
sudo apt install -y curl vim sudo nginx net-tools iproute2 libnginx-mod-stream
对于 CentOS/RHEL/Fedora 系统:
Bash
sudo yum install -y curl vim sudo nginx net-tools iproute2
或使用 dnf
sudo dnf install -y curl vim sudo nginx net-tools iproute2
🖥️ 使用方法
部署成功后,只需在终端输入 nsm 即可启动管理菜单。
Bash
nsm
主菜单选项说明
选项 命令 描述
1 添加或修改代理规则 引导式添加新的端口转发规则,支持 TCP/UDP 和 SSL 预读配置。
2 删除现有代理规则 查看所有已配置的规则,并按序号删除指定的规则。
3 重启 Nginx 检查 Nginx 配置语法并重载/重启 Nginx 服务,使规则生效。
4 系统状态检查 检查 Nginx 服务状态、配置包含状态、Stream SSL 模块加载状态等。
0 退出 NSM 退出管理工具。
关键特性说明:SSL 预读
当您在添加规则时选择开启 SSL 预读(ssl_preread)时,NSM 会在 Stream 模块中添加配置,让 Nginx 能够读取 SSL 握手时的 SNI 域名信息,从而实现:
单端口多 HTTPS 服务: 例如,将所有 443 端口的流量根据域名路由到不同的内网 Web 服务器。四层代理: Nginx 在 Stream 模块中工作在四层,不会终止 SSL 连接,证书和加解密工作仍在后端服务器上完成。⭐ 注意事项与故障排查
- Nginx 配置测试失败
如果 Nginx 服务重载失败,或您运行 nsm 后提示配置错误,请执行以下命令进行详细诊断:
Bash
sudo nginx -t
Stream 模块问题: 如果提示找不到 Stream 模块 (dlopen() ... failed),请确认您使用了最新的 deploy.sh,它会自动安装 libnginx-mod-stream 并清理配置冲突。语法错误: 如果提示配置语法错误,请检查您的规则文件 /etc/nginx/conf.d/nsm/nsm-stream.conf,确保没有多余或缺失的花括号 {} 或分号 ;。- 端口占用问题
如果您添加规则时 Nginx 无法启动,提示端口已被占用 (bind() failed),请运行以下命令检查哪个进程占用了该端口:
Bash
sudo netstat -tuln | grep <端口号>
- 配置路径
所有规则文件都存储在以下路径:
主规则文件: /etc/nginx/conf.d/nsm/nsm-stream.conf备份目录: /etc/nginx/conf.d/nsm/backups日志文件: /var/log/nsm-manager.log🗑️ 卸载指南
如果您希望彻底移除 Nginx Stream Manager (NSM),请执行以下步骤:
清除 Nginx 配置:Bashsudo rm -rf /etc/nginx/conf.d/nsm
移除管理脚本:
Bash
sudo rm -f /usr/local/bin/nsm
移除别名 (可选):
手动编辑您的 .bashrc 或 .zshrc 文件,删除 alias nsm='...' 这一行。
重载 Nginx:
Bash
sudo systemctl reload nginx📜 许可协议
本项目遵循 MIT 协议。
评论 (0)