tcp反向代理默认不在nginx的模块里,想要nginx实现反向代理tcp请求,需要自己编译tcp模块到nginx中。
步骤如下:
- 下载、解压缩nginx 源码
wget '[http://nginx.org/download/nginx-1.2.1.tar.gz](http://nginx.org/download/nginx-1.2.1.tar.gz)'
tar -zxvf nginx-1.2.1.tar.gz
- 下载tcp模块源码
git clone https://github.com/yaoweibin/nginx_tcp_proxy_module.git
- 给nginx源码打patch
cd nginx-1.2.1
patch -p1 < ../nginx_tcp_proxy_module/tcp.patch
- 编译、安装nginx
./configure --add-module=../nginx_tcp_proxy_module --prefix=/opt/nginx
make && sudo make install
- 配置nginx.conf
tcp模块是不属于HTTP框架内的,所以和HTTP{}同级别,配置如下,则会监听8080端口的tcp连接,反向代理到2000、3000端口
tcp{
upstream cluster {
server localhost:2000;
server localhost:3000;
}
server{
listen 8080;
proxy_pass cluster;
}
}
6.测试
服务器端代码
require 'socket' # 获取socket标准库
server = TCPServer.open(2000) # Socket 监听端口为 2000
loop { # 永久运行服务
Thread.start(server.accept) do |client|
client.puts(Time.now.ctime) # 发送时间到客户端
client.close
end
}
客户端代码
require 'socket'
socket = TCPSocket.open('localhost',8080)
puts socket.gets
socket.close
程序运行后,会打印出当前时间,表明nginx已可以反向代理tcp请求了。