tcp反向代理默認(rèn)不在nginx的模塊里外傅,想要nginx實現(xiàn)反向代理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框架內(nèi)的篮灼,所以和HTTP{}同級別,配置如下徘禁,則會監(jiān)聽8080端口的tcp連接诅诱,反向代理到2000、3000端口
tcp{
upstream cluster {
server localhost:2000;
server localhost:3000;
}
server{
listen 8080;
proxy_pass cluster;
}
}
6.測試
服務(wù)器端代碼
require 'socket' # 獲取socket標(biāo)準(zhǔn)庫
server = TCPServer.open(2000) # Socket 監(jiān)聽端口為 2000
loop { # 永久運行服務(wù)
Thread.start(server.accept) do |client|
client.puts(Time.now.ctime) # 發(fā)送時間到客戶端
client.close
end
}
客戶端代碼
require 'socket'
socket = TCPSocket.open('localhost',8080)
puts socket.gets
socket.close
程序運行后送朱,會打印出當(dāng)前時間娘荡,表明nginx已可以反向代理tcp請求了。