解决nginx: [emerg] unknown directive “stream“ in /etc/nginx/nginx.conf问题

stream模块一般用于tcp/UDP数据流的代理和负载均衡,可以通过stream模块代理转发TCP消息。 ngx_stream_core_module模块由1.9.0版提供。 默认情况下,没有构建此模块。 -必须使用-with stream配置参数启用。 也就是说,必须在使用./configure --with-stream编译时添加流模块。 流模块的使用方法与http模块相同,语法也基本相同。

stream主要有两个可用场景。

一是实现流量的代理转发。 这里所述的代理转发是指,只有一些端口服务被限制为活动IP地址。 例如,mysql账户一般将源地址限制为APP应用服务器,而nginx可能同时是web APP应用服务器。 开发人员需要验证一些数据库数据问题,但帐户的源地址有限制。 此时,通过在nginx中进行流传送,可以实现从开发终端向mysql的访问。 二是实现流量负载均衡。 有多个tcp或udp端口服务,如DNS。 流模块支持负载平衡算法,如轮询、最小连接数和ip_hash,从而实现数据流负载平衡。

已邀请:

首先:tengine不支持   stream

1、编译时确认添加关联组件

nginx -V确保nginx安装了–with-stream

如果是编译的话,需要增加如下: --with-stream --with-stream=dynamic --with-stream_ssl_module --with-stream_realip_module

如果是yum的话参考如下:

yum -y install epel-release

 yum -y install nginx-all-modules.noarch



2、增加引入依赖库:nginx.conf最上增加引入 ,具体的应该在编译后的modules下:

load_module /usr/lib64/nginx/modules/ngx_stream_module.so;

3、添加stream配置

#redis代理测试
stream {
upstream redis {
#redis真实访问地址
server 192.168.0.2:6701 max_fails=3 fail_timeout=30s;
}

server {
#外网监听地址
listen 6379;
#代理连接超时时间
proxy_connect_timeout 5s;
#代理超时时间
proxy_timeout 30s;
#代理名称
proxy_pass redis;
}
}

要回复问题请先登录注册