美文网首页后端之路
Nginx的Stream模块的编译使用

Nginx的Stream模块的编译使用

作者: 辉耀辉耀 | 来源:发表于2017-09-18 16:14 被阅读0次
    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模块的编译使用

        本文链接:https://www.haomeiwen.com/subject/easbsxtx.html