1、简介
nginx在1.9.0的时候,增加了一个 stream 模块,用来实现四层协议(网络层和传输层)的转发、代理、负载均衡等。stream模块的用法跟http的用法类似,允许我们配置一组TCP或者UDP等协议的监听,然后通过proxy_pass来转发我们的请求,通过upstream添加多个后端服务,实现负载均衡。
2、编译
./configure --with-stream # 编译安装nginx时候,指定此参数即可
备注:nginx -V 查看已安装模块
3、配置
stream {
upstream backend {
hash $remote_addr consistent;
server backend1.example.com:12345 weight=5;
server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}
upstream dns {
server 192.168.0.1:53535;
server dns.example.com:53;
}
upstream zk_server {
server 172.16.3.8:2181 weight=5;
}
server {
listen 12345;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass backend;
}
server {
listen 127.0.0.1:53 udp reuseport;
proxy_timeout 20s;
proxy_pass dns;
}
server {
listen [::1]:12345;
proxy_pass unix:/tmp/stream.socket;
}
server {
listen 2181 tcp;
proxy_responses 1;
proxy_timeout 20s;
proxy_pass zk_server;
}
}
4、测试
登录192.168.100.100(nginx地址)服务器执行看是否有3306端口的监听(通过nginx远程登陆数据库,需要配置可远程访问数据库的用户)
netstat -nap|grep 3306
5、备注
测试发现nginx会等待session结束才会记录到日志文件;
session日志只是tcp层面的记录,包括session时间,发送接收字节数等等;
session内部发送日志(比如一个socket连接建立起来以后,多次发送心跳数据)需要在应用层面才能记录;