使用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将会把请求转发给我们真实的服务器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值