Nginx 1.9 版本以后增加了stream模块,可以对tcp,udp请求进行代理和负载均衡了,今天来体验一下
首先编译安装过程configure的时候增加选项 --with-stream --with-stream_ssl_module 是支持tcp代理
安装完成后修改 nginx.conf 在文件最后添加 include tcp/*.conf ,注意不是在http范畴内,然后在conf目录下创建tcp目录
简单测试
都在一个机器上, nginx监听 10000 端口,然后开两个窗口,用nc监听 10001 、10002端口。
nginx配置
/ nc -l 10001
telnet--> nginx(10000) ---->
nc -l 10002
配置
stream {
upstream backend {
server 127.0.0.1:10001;
server 127.0.0.1:10002;
}
server {
listen 10000;
# listen 10000 udp; 如需代理udp端口则在端口后面加udp即可
proxy_timeout 20s;
proxy_pass backend;
}
}
telnet 127.0.0.1 10000
第一次会代理到 10001 端口,第二次会到 10002 端口,代理正常。
下面是一个ssl 然后ip hash方式的负载均衡(tcp也支持几种负载均衡方式 round-robin, least_conn least_time, hash等)
stream {
upstream backend {
hash $remote_addr;
server 192.168.1.10:20001;
server 192.168.1.10:20002;
}
server {
listen 20000 ssl;
ssl_certificate /data/keys/CAcert.pem;
ssl_certificate_key /data/keys/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 2h;
proxy_timeout 20s;
proxy_pass backend;
}
}