牛骨文教育服务平台(让学习变的简单)
博文笔记

nginx学习笔记(3):TCP反向代理基本配置

创建时间:2016-12-11 投稿人: 浏览次数:729

一般来说,反向代理方式是指用代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外的表现就是一个 Web 服务器。

充当反向代理服务器也是 nginx 的一种常见用法,但一直以来,nginx 并不支持 TCP 协议,从1.90版本起,nginx 增加了 stream 模块用于一般的 TCP 代理和负载均衡。

新增的 ngx_stream_core_module 模块并不会默认安装,需要在编译时通过指定 –with-stream 参数来激活这个模块。

即编译安装nginx时,进入nginx-x.x.x目录后执行以下命令:

./configure --with-stream
make
make install

安装完毕后,只用对nginx.conf稍作简单的配置就可以实现TCP反向代理了。

官方配置示例如下:

worker_processes auto;

error_log /var/log/nginx/error.log info;

events {
    worker_connections  1024;
}

stream {
    # upstream 块
    # upstream 块定义了一个上游服务器的集群,便于反向代理中的 proxy_pass 使用
    upstream backend {
        # 使用一致性hash算法,根据客户端ip映射到合适的节点
        hash $remote_addr consistent;

        # server 配置项
        # server 配置项指定了一台上游服务器的名字,这个名字可以是域名、IP地址端口、UNIX句柄等
        # 其后还可以跟参数 weight、max_fails等
        server backend1.example.com:12345 weight=5;
        server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
        server unix:/tmp/backend3;
    }

    upstream dns {
       server 192.168.0.1:53535;
       server dns.example.com:53;
    }

    # server 块中的配置项
    # listen:监听指定端口
    # proxy_pass:将TCP连接及数据收发转向到指定上游服务器
    # proxy_timeout:距离上一次成功访问(连接或读写)上游服务器的时间超过了指定时间就判定为超时,断开此连接
    # proxy_connect_timeout:nginx连接上游服务器超时的时间
    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;
    }

    server {
        listen [::1]:12345;
        proxy_pass unix:/tmp/stream.socket;
    }
}

应用场景:处于网络A的回射客户端和处于网络B的回射服务端,经由nginx代理转发,实现跨网段通信(nginx所在主机可分别与网络A、网络B连通)。

(1)回射客户端:

客户端的IP地址:
这里写图片描述

客户端将要连接的地址:
这里写图片描述

(2)回射服务端:

服务端的IP地址:
这里写图片描述

服务端绑定一个任意地址:
这里写图片描述

(3)nginx的配置:

nginx所在机器的IP地址:
这里写图片描述

nginx反向代理配置:
这里写图片描述
这个配置表示,当客户端使用 TCP 时,若访问到 nginx 服务器的5555端口时,就会将其转交给上游服务器的3333端口(这里的上游服务器也就是回射服务端)。

(4)测试结果:
启动nginx以及回射服务端、客户端:
这里写图片描述

这里写图片描述

可以看到,客户端能够成功接收到服务端回射的消息:
这里写图片描述

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。