nginx tcp代理功能由nginx_tcp_proxy_module模块提供,同时监测后端主机状态。该模块包括的模块有: ngx_tcp_module, ngx_tcp_core_module, ngx_tcp_upstream_module, ngx_tcp_proxy_module, ngx_tcp_upstream_ip_hash_module。
1. 安装
# wget http://nginx.org/download/nginx-1.4.4.tar.gz # tar zxvf nginx-1.4.4.tar.gz # cd nginx-1.4.4 # ./configure --add-module=/path/to/nginx_tcp_proxy_module # make # make install
2. 配置
http { listen 80; location /status { check_status; } } tcp { upstream cluster_www_ttlsa_com { # simple round-robin server 127.0.0.1:1234; check interval=3000 rise=2 fall=5 timeout=1000; #check interval=3000 rise=2 fall=5 timeout=1000 type=ssl_hello; #check interval=3000 rise=2 fall=5 timeout=1000 type=http; #check_http_send "GET / HTTP/1.0\r\n\r\n"; #check_http_expect_alive http_2xx http_3xx; } server { listen 8888; proxy_pass cluster_www_ttlsa_com; } }
这会出现一个问题,就是tcp连接会掉线。原因在于当服务端关闭连接的时候,客户端不可能立刻发觉连接已经被关闭,需要等到当Nginx在执行check规则时认为服务端链接关闭,此时nginx会关闭与客户端的连接。文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-tcp-proxy/
3. 保持连接配置
http { listen 80; location /status { check_status; } } tcp { timeout 1d; proxy_read_timeout 10d; proxy_send_timeout 10d; proxy_connect_timeout 30; upstream cluster_www_ttlsa_com { # simple round-robin server 127.0.0.1:1234; check interval=3000 rise=2 fall=5 timeout=1000; #check interval=3000 rise=2 fall=5 timeout=1000 type=ssl_hello; #check interval=3000 rise=2 fall=5 timeout=1000 type=http; #check_http_send "GET / HTTP/1.0\r\n\r\n"; #check_http_expect_alive http_2xx http_3xx; } server { listen 8888; proxy_pass cluster_www_ttlsa_com; so_keepalive on; tcp_nodelay on; } }
nginx_tcp_proxy_module模块指令具体参见: http://yaoweibin.github.io/nginx_tcp_proxy_module/README.html文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-tcp-proxy/ 文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-tcp-proxy/

我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
7F
按文章设置好后,用telnet连nginx代理端口失败,日志记录错误为upstream servers are busy or encounter error! while connecting to upstream. client: xxxxxx, server xxxxx
B1
@ 匿名 我也遇到了,重启之后正常了。
6F
[…] 16.?CDN调度器HAProxy、Nginx、Varnish 17.?lnmp架构下php安全配置分享 18.?nginx tcp代理 19.?nginx正向代理 20.?搭建nginx反向代理用做内网域名转发 […]
5F
patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch
这个还没加
4F
patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch
这个还没加
3F
你这个 nginx_tcp_proxy_module 这个module 哪儿来的?貌似要下载一个 yaoweibin 的module才可以吧
B1
@ xxx nginx1.9已经支持tcp,不需要再使用这个模块
2F
hggg
1F
proxy_pass cluster_www_ttlsa_com,这个真的不需要http:// 跟着吗?
B1
@ Aceslup 这个只是提供检查功能的么?
B1
@ Aceslup 只是一个名称而已
来自外部的引用