nginx stream模块初探

来源:互联网 发布:如何淘宝买东西 编辑:程序博客网 时间:2024/05/18 15:51

前言

nginx从1.9.0开始,新增加了一个stream模块,用来实现四层协议的转发、代理或者负载均衡等。这完全就是抢HAproxy份额的节奏,鉴于nginx在7层负载均衡和web service上的成功,和nginx良好的框架,stream模块前景一片光明。

stream 模块编译

stream模块默认没有编译到nginx, 编译nginx时候 ./configure –with-stream 即可

官网:http://nginx.org/en/docs/stream/ngx_stream_core_module.html

用法

stream模块用法和http模块差不多,关键的是语法几乎一致。熟悉http模块配置语法的上手更快
以下是一个配置了tcp负载均衡和udp(dns)负载均衡的例子, 有 server,upstream块,而且还有server,
hash, listen, proxy_pass等指令,如果不看最外层的stream关键字,还以为是http模块呢。

worker_processes auto;error_log logs/error.stream.log info;events {    worker_connections  1024;}stream {    upstream backend {        hash $remote_addr consistent;        server 127.0.0.1:12346 weight=5;        server 127.0.0.1:12347            max_fails=3 fail_timeout=30s;        server 127.0.0.1:12348            max_fails=3 fail_timeout=30s;    }    upstream dns {       server 17.61.29.79:53;       server 17.61.29.80:53;       server 17.61.29.81:53;       server 17.61.29.82:53;    }    server {        listen 12345;        proxy_connect_timeout 1s;        proxy_timeout 3s;        proxy_pass backend;    }    server {        listen 127.0.0.1:53 udp;        proxy_responses 1;        proxy_timeout 20s;        proxy_pass dns;    }}

stream core 一些变量

注意:变量支持是从 nginx 1.11.2版本开始的

$binary_remote_addr二进制格式的客户端地址$bytes_received从客户端接收到的字节数$bytes_sent发往客户端的字节数$hostname连接域名$msec毫秒精度的当前时间$nginx_versionnginx 版本$pidworker进程号$protocol通信协议(UDP or TCP)$remote_addr客户端ip$remote_port客户端端口$server_addr接受连接的服务器ip,计算此变量需要一次系统调用。所以避免系统调用,在listen指令里必须指定具体的服务器地址并且使用参数bind$server_port接受连接的服务器端口$session_time毫秒精度的会话时间(版本1.11.4开始)$status会话状态(版本1.11.4开始), 可以是一下几个值:200成功400不能正常解析客户端数据403禁止访问500服务器内部错误502网关错误,比如上游服务器无法连接503服务不可用,比如由于限制连接等措施导致$time_iso8601ISO 8601时间格式$time_local普通日志格式的时间戳

stream 模块

目前官网上列出的第三方模块、简直就是http模块的镜像、比如access模块访问控制ip和ip段,map模块实现映射、 geo模块实现地理位置映射、等等。使用这些模块的时候一定要看是哪个版本才支持的、比如log模块,只有在nginx-1.11.4才支持。

ngx_stream_core_modulengx_stream_access_modulengx_stream_geo_modulengx_stream_geoip_modulengx_stream_js_modulengx_stream_limit_conn_modulengx_stream_log_modulengx_stream_map_modulengx_stream_proxy_modulengx_stream_realip_modulengx_stream_return_modulengx_stream_split_clients_modulengx_stream_ssl_modulengx_stream_ssl_preread_modulengx_stream_upstream_modulengx_stream_upstream_hc_module
0 0
原创粉丝点击