Nginx的Stream模块的编译使用

Nginx的Stream模块的编译使用_第1张图片
NGINX

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
普通日志格式的时间戳

你可能感兴趣的:(Nginx的Stream模块的编译使用)