开发过程中经常遇到这样的需求

  1. 需要基于某网关设备做负载均衡
  2. 内网中某台服务器提供外网访问服务
  3. 80端口流量区分

TCP端口转发

需求1、2归结起来说就是对TCP流量转发,nginx 原生支持tcp流量转发。

比如我A服务器(192.168.1.100)是网关设备,有公网访问能力;B(192.168.1.101)、C(192.168.1.102)服务器是内网服务器;想通过A服务器将请求转发到B、C服务。具体配置如下:

stream{
        server{
               listen 0.0.0.0:10190 udp;
               proxy_responses 0;
               proxy_timeout 2s;
               proxy_pass proxy_b;
        }
        server{
               listen 0.0.0.0:10191 udp;
               proxy_responses 0;
               proxy_timeout 2s;
               proxy_pass proxy_c;
        }

       upstream proxy_b{
               server 192.168.1.101:10290;
       }
        upstream proxy_c{
               server 192.168.1.102:10290;
       }
}

该配置需要再ngxin顶级模块中配置。通过上面的配置,就能将A服务器的10190转发到B服务器的10290,A服务器的10191转发到C服务器的10290。

HTTP流量转发

上面介绍的是纯TCP转发,如果想做HTTP分流,比如将不同请求全部转发到A的80端口然后再区分流量,只能通过nginx的http模块来配置。具体配置如下:

http
{
    ...
    
    upstream socket_proxy {
            hash $remote_addr consistent;
            server domain-b.com:8020 weight=5 max_fails=3 fail_timeout=30s;
    }
    server {
           listen 80;
           server_name domain-a.com;
  
           location / {
                   proxy_pass http://socket_proxy;
            }
     }
    
    
    ...
    
}

上面提供的经验能在开发中提供很好的帮助。

Tags: nginx流量转发, nginx负载均衡, nginxdai'li

Related Posts:

Leave a Comment