将非HTTP协议流经Nginx,改写为长尾词代理。

2026-04-24 16:442阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计597个文字,预计阅读时间需要3分钟。

将非HTTP协议流经Nginx,改写为长尾词代理。

Stream 模块并非用于开发的模块,而是+Nginx 内置的、开箱即用的四层代理能力。它不支持用户像编写Lua或C插件那样进行模块级开发,而是通过配置驱动实现TCP/UDP流转发——本质上是声明式代理,而非编程式扩展。

确认 Stream 模块是否可用

运行以下命令验证:

  • nginx -V 2>&1 | grep -o with-stream:有输出说明已编译启用
  • 若无输出,Ubuntu/Debian 可安装 nginx-full 包;CentOS/RHEL 需重编译并加 --with-stream
  • 部分发行版(如官方 nginx.org 的 stable 包)默认包含,无需额外操作

配置结构必须合规

Stream 配置不能嵌套在 http 块中,必须与 http 平级,且仅含特定指令:

  • 主配置中添加:load_module modules/ngx_stream_core_module.so;(部分版本需显式加载)
  • 顶层定义:stream { include /etc/nginx/stream.d/*.conf; }
  • 每个 .conf 文件内只能写 upstream + server,禁用 rewrite、return、access_log 等 HTTP 指令

典型非 HTTP 协议代理配置要点

以 MySQL 和 Redis 为例,关键参数不可省略:

  • proxy_timeout:数据库长连接建议设为 1h1d,避免空闲断连
  • proxy_responses:MySQL 握手只返回 1 包,设为 1;Redis 请求-响应模式也适用
  • upstream 中 max_fails/fail_timeout:启用被动健康检查,例如 max_fails=3 fail_timeout=30s
  • backup 标记:可指定容灾节点,仅在所有主节点失败时启用

限制与注意事项

Stream 模块能力明确,误用会导致配置失败或行为异常:

  • 不解析协议内容,无法做鉴权、路由改写、包体修改等七层操作
  • 原生不支持主动健康检查(如定期发 PING),需配合第三方模块或外部脚本刷新 upstream
  • SSL 终止需额外启用 --with-stream_ssl_module,且不支持 SNI 路由
  • 日志功能受限,原生无 access_log,错误排查依赖 error.log 和 telnet/mysql-cli 连通性测试
标签:NginxStream

本文共计597个文字,预计阅读时间需要3分钟。

将非HTTP协议流经Nginx,改写为长尾词代理。

Stream 模块并非用于开发的模块,而是+Nginx 内置的、开箱即用的四层代理能力。它不支持用户像编写Lua或C插件那样进行模块级开发,而是通过配置驱动实现TCP/UDP流转发——本质上是声明式代理,而非编程式扩展。

确认 Stream 模块是否可用

运行以下命令验证:

  • nginx -V 2>&1 | grep -o with-stream:有输出说明已编译启用
  • 若无输出,Ubuntu/Debian 可安装 nginx-full 包;CentOS/RHEL 需重编译并加 --with-stream
  • 部分发行版(如官方 nginx.org 的 stable 包)默认包含,无需额外操作

配置结构必须合规

Stream 配置不能嵌套在 http 块中,必须与 http 平级,且仅含特定指令:

  • 主配置中添加:load_module modules/ngx_stream_core_module.so;(部分版本需显式加载)
  • 顶层定义:stream { include /etc/nginx/stream.d/*.conf; }
  • 每个 .conf 文件内只能写 upstream + server,禁用 rewrite、return、access_log 等 HTTP 指令

典型非 HTTP 协议代理配置要点

以 MySQL 和 Redis 为例,关键参数不可省略:

  • proxy_timeout:数据库长连接建议设为 1h1d,避免空闲断连
  • proxy_responses:MySQL 握手只返回 1 包,设为 1;Redis 请求-响应模式也适用
  • upstream 中 max_fails/fail_timeout:启用被动健康检查,例如 max_fails=3 fail_timeout=30s
  • backup 标记:可指定容灾节点,仅在所有主节点失败时启用

限制与注意事项

Stream 模块能力明确,误用会导致配置失败或行为异常:

  • 不解析协议内容,无法做鉴权、路由改写、包体修改等七层操作
  • 原生不支持主动健康检查(如定期发 PING),需配合第三方模块或外部脚本刷新 upstream
  • SSL 终止需额外启用 --with-stream_ssl_module,且不支持 SNI 路由
  • 日志功能受限,原生无 access_log,错误排查依赖 error.log 和 telnet/mysql-cli 连通性测试
标签:NginxStream