nginx从1.9.0开始,新增加了一个stream模块,用来实现四层协议的转发、代理或者负载均衡等。这完全就是抢HAproxy份额的节奏,鉴于nginx在7层负载均衡和web service上的成功,和nginx良好的框架,stream模块前景一片光明。
ngx_stream_core_module模块
是模拟反代基于tcp或udp的服务连接,即工作于传输层的反代或调度器
环境:centOS7.3_1611 物理服务器一台
Nginx版本:1.12.1
1.下载NGINX稳定发行版
https://nginx.org/download/nginx-1.12.1.tar.gz
2.解压并切换到安装目录
tar -zxvf nginx-1.12.1.tar.gz
cd nginx-1.12.1
3.编译安装
yum -y install gcc gcc-c++ autoconf automake
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel
./configure --prefix=/opt/nginx --sbin-path=/opt/nginx/sbin/nginx --conf-path=/opt/nginx/conf/nginx.conf --with-http_stub_status_module --with-http_gzip_static_module --with-stream
make
make install
cd /opt/nginx
4.修改配置文件
vim /opt/nginx/conf/nginx.conf(在配置文件最后行添加如下)
stream {
upstream NAME1 {
hash $remote_addr consistent;
server 10.22.0.7:5000 max_fails=3 fail_timeout=30s;
server 10.22.0.8:5000 max_fails=3 fail_timeout=30s;
}
upstream NAME2 {
hash $remote_addr consistent;
server 192.168.5.8:8080 max_fails=3 fail_timeout=30s;
}
server{
listen 8080;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass NAME1;
}
server{
listen 60000;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass NAME2;
}
}
解析:
如上配置文件的含义为
将端口8080反向代理NAME1组的serverIP:PORT,最大失败次数为3,超时时间为30秒;
将端口60000反向代理NAME2组的serverIP:PORT,最大失败次数为3,超时时间为30秒。
5.检测语法
/opt/nginx/sbin/nginx -t
6.开启NGINX
/opt/nginx/sbin/nginx
7.重启NGINX
/opt/nginx/sbin/nginx -s reload
这里推荐使用reload而不是restart。
8.访问IP:PORT验证是否生效
stream core 一些变量
(注意:变量支持是从 nginx 1.11.2版本开始的)
$binary_remote_addr
二进制格式的客户端地址
$bytes_received
从客户端接收到的字节数
$bytes_sent
发往客户端的字节数
$hostname
连接域名
$msec
毫秒精度的当前时间
$nginx_version
nginx 版本
$pid
worker进程号
$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_iso8601
ISO 8601时间格式
$time_local
普通日志格式的时间戳
网友评论