Nginx支持四层代理
http://nginx.org/en/docs/stream/ngx_stream_core_module.html
该ngx_stream_core_module
模块自1.9.0版开始可用。默认情况下,此模块不构建,应使用配置参数启用 --with-stream
。
[root@linux-node1 src]# tar xf nginx-1.10.3.tar.gz [root@linux-node1 src]# cd nginx-1.10.3 [root@linux-node1 nginx-1.10.3]# useradd -s /sbin/nologin -M www [root@linux-node1 nginx-1.10.3]# yum install gcc gcc-c++ zlib-devel pcre-devel openssl openssl-devel -y [root@linux-node1 nginx-1.10.3]# ./configure --prefix=/usr/local/nginx-1.10.3 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-stream [root@linux-node1 nginx-1.10.3]# make && make install 配置文件 worker_processes 1; events { worker_connections 1024; } stream { upstream tcp_proxy { hash $remote_addr consistent; #远程地址做个hash server 192.168.230:131:22; } server { listen 2222; proxy_connect_timeout 1s; proxy_timeout 10s; #后端连接超时时间 proxy_pass tcp_proxy; } } [root@linux-node1 conf]# /usr/local/nginx-1.10.3/sbin/nginx [root@linux-node1 conf]# netstat -ntpl|grep 2222 tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 12045/nginx: master [root@linux-node1 conf]# ssh -p 2222 root@192.168.230.130 root@192.168.230.130's password: Last login: Sat Apr 8 22:32:14 2017 from linux-node1 [root@linux-node2 ~]# ls anaconda-ks.cfg hello.py
#############################################################3
nginx使用ngx_stream_core_module模块代理tcp长连接短连接,可以增强服务器的容灾能力
下面是一个配置信息,自己也方便记录一下
#########################################################
KeepAlive
这里的keepalive是TCP的探活机制:
[root@ ~]# sysctl -a |grep tcp_keepalive
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 75
参数解释:
- tcp_keepalive_time 1200 ,tcp建立链接后1200 秒如果无数据传输,则会发出探活数据包
- tcp_keepalive_probes 9 , 共发送9次
- tcp_keepalive_intvl 75 ,每次间隔75秒
KeepAlive并不是默认开启的,在Linux系统上没有一个全局的选项去开启TCP的KeepAlive。需要开启KeepAlive的应用必须在TCP的socket中单独开启。
TCP socket也有三个选项和内核对应,通过setsockopt系统调用针对单独的socket进行设置:
- TCPKEEPCNT: 覆盖 tcpkeepaliveprobes
- TCPKEEPIDLE: 覆盖 tcpkeepalivetime
- TCPKEEPINTVL: 覆盖 tcpkeepalive_intvl
Nginx
server {
listen 127.0.0.1:3306 so_keepalive=on;
proxy_pass 172.17.0.3:3306;
#建立连接时间
proxy_connect_timeout 5s;
#保持连接时间
proxy_timeout 3600s;
error_log /data/logs/my.log info;
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
- on: 开启,探测参数更加系统默认值
- off: 关闭
- keepidle: 等待时间
- keepintvl: 发送探测报文间隔
- keepcent: 探测报文发送次数
proxy_timeout:建连后无数据时与后端服务器连接保持时间,默认75s。
proxy_connect_timeout:与后端服务器建立连接的超时, 不超过75s。
proxy_send_timeout:向后端服务器组发出write请求后,等待响应的超时间,默认为60秒。
proxy_read_timeout:向后端服务器组发出read请求后,等待响应的超时间,默认为60秒。