nginx搭建tcp代理服务器

 更新时间:2015年08月18日 09:16:38   投稿:hebedich  
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;
  }
}

nginx_tcp_proxy_module模块指令具体参见: http://yaoweibin.github.io/nginx_tcp_proxy_module/README.html

相关文章

  • Windows设置nginx开机自启动的方法

    Windows设置nginx开机自启动的方法

    这篇文章主要介绍了Windows设置nginx开机自启动的方法,通过两种方式实现nginx的开机自启动:winws和window计划程序,每种方式给大家介绍的非常详细需要的朋友可以参考下
    2022-11-11
  • Nginx如何设置域名转发到服务器指定的端口

    Nginx如何设置域名转发到服务器指定的端口

    这篇文章主要介绍了Nginx如何设置域名转发到服务器指定的端口,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • nginx 代理服务器配置双向证书验证的方法

    nginx 代理服务器配置双向证书验证的方法

    这篇文章主要介绍了nginx 代理服务器配置双向证书验证的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 基于Nginx的衍生版服务器Tengine简介

    基于Nginx的衍生版服务器Tengine简介

    这篇文章主要介绍了基于Nginx的衍生版服务器Tengine简介,本文讲解了Nginx的特性、Tengine的特性、架构和扩展性等内容,需要的朋友可以参考下
    2015-03-03
  • keepalived+nginx高可用实现方法示例

    keepalived+nginx高可用实现方法示例

    这篇文章主要介绍了keepalived+nginx高可用实现方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Nginx中IF、AND、OR语句用法实例

    Nginx中IF、AND、OR语句用法实例

    这篇文章主要介绍了Nginx中IF、AND、OR语句用法实例,本文讲解的是Ningx中的逻辑判断语句用法,需要的朋友可以参考下
    2015-02-02
  • nginx源码分析configure脚本详解

    nginx源码分析configure脚本详解

    这篇文章主要介绍了nginx源码分析configure脚本详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • 如何修改Nginx版本名称伪装任意web server

    如何修改Nginx版本名称伪装任意web server

    这篇文章主要介绍了修改Nginx版本名称伪装任意web server的方法,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-08-08
  • 如何配置nginx作为静态文件托管服务器

    如何配置nginx作为静态文件托管服务器

    这篇文章主要介绍了如何配置nginx作为静态文件托管服务器的相关资料,下载nginx在windows上是个压缩包,解压后,使用命令行输入nginx进行启动,感兴趣的朋友跟随小编一起看看吧
    2024-01-01
  • Nginx出现403错误,应该如何解决

    Nginx出现403错误,应该如何解决

    这篇文章主要介绍了Nginx出现403错误,应该如何解决?具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03

最新评论