错误描述
启动nginx的时候报一下错误
nginx: [emerg] unknowndirective"stream"in/usr/local/nginx//conf/nginx.conf:55
解决方法
1.先删除原有的nginx
2.重新构建nginx
#添加使用--with-stream=dynamic配置./configure--prefix=/usr/local/nginx/--with-stream=dynamic#然后makemakeinstallmakemakeinstall
3.修改nginx.conf文件, 在首行添加
load_module/usr/local/nginx/modules/ngx_stream_module.so;
4.配置文件种使用stream
stream { upstreamkube-apiserver { server192.168.10.64:6443max_fails=3fail_timeout=30s; server192.168.10.65:6443max_fails=3fail_timeout=30s; } server { listen7443; proxy_connect_timeout2s; proxy_timeout900s; proxy_passkube-apiserver; } }
5.测试是否正常,显示正常启动
./sbin/nginx-t
stream介绍
stream模块一般用于TCP/UDP数据流的代理和负载均衡,通过stream模块我们可以代理转发tcp报文。
stream使用场景
stream主要有两个可用场景。
一是实现流量的代理转发,这里所说的代理转发是只某些端口服务是有源IP地址限制的,例如mysql账户一般是限制了源地址为应用服务器,nginx可能同时是WEB应用服务器,开发人员需要验证一些数据库数据问题,但是账户源地址有限制,此时通过nginx进行数据流转发就可以实现开发终端到mysql的访问。
二是实现流量的负载均衡,我们有多个tcp或者udp端口服务(比如DNS),通过stream模块我们可以实现数据流的负载均衡,支持负载均衡算法包括轮询、最小连接数、ip_hash等。
配置示例
1.stream块配置
stream块配置与http块并列,在nginx.conf中配置,可以用include方式将我们配置实例单独配置,方便管理。
stream { log_formatproxy'$remote_addr [$time_local] ''$protocol $status $bytes_sent $bytes_received ''$session_time "$upstream_addr" ''"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"'; access_log/var/log/nginx/tcp-access.logproxy ; open_log_file_cacheoff; include/etc/nginx/conf.d/*.stream;}
1、tcp端口数据流代理
###############################################################################这是一个tcp3306端口代理的配置示例############################################################################server { listen3306; #需要监听的端口proxy_connect_timeout5s; proxy_timeout30s; proxy_pass192.168.10.151:3306; #需要代理的端口}
2、负载均衡配置
###############################################################################这是一个udp53端口负载均衡的配置示例############################################################################upstreammydns { hash$remote_addrconsistent; #配置ip_hash方式,默认轮询server192.168.10.10:53; #这里配置成要访问的地址和端口server192.168.10.20:53; server192.168.10.30:53; } server { listen53udpreuseport; #需要监听的端口,因为udp非可靠传输协议,使用reuseport保证请求分配到统一会话中proxy_connect_timeout5s; proxy_timeout20s; proxy_passmydns; } ————————————————版权声明:本文为CSDN博主「恒悦sunsite」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/carefree2005/article/details/121229818