使用Nginx实现TCP反向代理

  1. 首先下载nginx,注意1.9.0之前的版本没有自带nginx代理,需要编译时指定。

    http://nginx.org/en/download.html
    在这里插入图片描述

  2. 修改conf/nginx.conf

......
stream {

    upstream backend {
        hash $remote_addr consistent;
        # 代理以下3台机器
		server 127.0.0.1:9997 max_fails=3 fail_timeout=1000s;
        server 127.0.0.1:9998 max_fails=3 fail_timeout=1000s;
        server 127.0.0.1:9999 max_fails=3 fail_timeout=1000s;
    }


    server {
        统一端口监听为9010
        listen 9010;
        proxy_connect_timeout 1000s;
        proxy_timeout 1000s;
        proxy_pass backend;
    }
}

.....
  1. 启动测试

在这里插入图片描述
使用golang开启3个tcp端口

package main


import (
	"fmt"
	"net"
	"strings"
)

// 读取数据
func handleConnection(conn net.Conn) {

	for {
		buf := make([]byte, 1024)
		if _,err := conn.Read(buf);err == nil {
			result := strings.Replace(string(buf),"\n","",1)
			fmt.Println(result)
		}else{
			fmt.Println(err)
		}

	}
}

func main() {

	/*
	   Listen: 返回在一个本地网络地址laddr上监听的Listener。网络类型参数net必须是面向流的网络: "tcp"、"tcp4"、"tcp6"、"unix"或"unixpacket"。
	*/
	listener, err := net.Listen("tcp", "localhost:9999")
	if err != nil {
		fmt.Println("listen error:", err)
		return
	}

	//todo 限速算法
	fmt.Println("server listen success")
	for {
		//等待客户端接入
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("accept error:", err)
			break
		}
		// 使用协程
		go handleConnection(conn)
	}

}

在这里插入图片描述

在这里插入图片描述

建立连接,收到请求,我们与Nginx建立连接后,Nginx将会把请求转发给我们真实的服务器。

猜你喜欢

转载自blog.csdn.net/cainiao1412/article/details/106234310
今日推荐