当前位置 主页 > 服务器问题 > nginx问题汇总 >

    nginx搭建tcp代理服务器

    栏目:nginx问题汇总 时间:2018-10-12 16:26

    Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,大部分门户网站都把它作为首选WEB前端。下面讲讲如何利用Nginx搭建tcp代理服务器

    nginx不仅可以是http代理服务器,也可以轻松搭建成tcp代理服务器。

    首先我们看下最新开发版的搭建方法

    1. 安装

    > wget http://nginx.org/download/nginx-1.9.0.tar.gz> tar zxvf nginx-1.9.0.tar.gz

    版本要求 1.9.0+

    2、配置

    worker_processes auto;error_log /var/log/nginx/error.log info;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;  }  server {    listen 12345;    proxy_connect_timeout 1s;    proxy_timeout 3s;    proxy_pass backend;  }  server {    listen [::1]:12345;    proxy_pass unix:/tmp/stream.socket;  }}

    3. 补充
    现在nginx 1.9是开发版,目前稳定版没有stream的功能,但在下个的稳定版发布时,这功能就会集成进来。因此推荐以后用http proxy的同学可以考虑换成tcp proxy,如果只是做简单的代理而已,而且性能上会更优异。

    二、老版本的搭建方法

    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会关闭与客户端的连接。

    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;  }}