nginx1.9+做TCP代理(端口转发)

如题所示,nginx在1.9版本之后可以充当端口转发的作用,即:访问该服务器的指定端口,nginx就可以充当端口转发的作用将流量导向另一个服务器,同时获取目标服务器的返回数据并返回给请求者。nginx的TCP代理功能跟nginx的反向代理不同的是:请求该端口的所有流量都会转发到目标服务器,而在反向代理中可以细化哪些请求分发给哪些服务器;另一个不同的是,nginx做TCP代理并不仅仅局限于WEB的URL请求,还可以转发如memcached、MySQL等点到点的请求

实现步骤如下:

(1)nginx在编译时添加“–with-stream”:

./configure –prefix=/usr/local/nginx –user=www –group=www –with-http_stub_status_module –with-pcre=/usr/local/src/pcre-8.38 –add-module=/usr/local/src/ngx_cache_purge-2.3 –with-http_gzip_static_module –with-stream

(2)修改nginx配置文件nginx.conf:

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
user  www www;
worker_processes  32; 
pid        logs/nginx.pid;

events {
    #use epoll;                            #Linux最常用支持大并发的事件触发机制
    worker_connections  65535;
}

stream {
    upstream zifangsky {
        hash $remote_addr consistent;
        server 10.10.100.31:8000;
    }
    server {
        listen 8080;
        proxy_connect_timeout 5s;
        proxy_timeout 5s;
        proxy_pass zifangsky;
    }
}
http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       9000;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

}

在上面的配置文件中配置了在访问此服务器的8080端口时,会将流量相应转发到10.10.100.31这个服务器的8000端口上

(3)查看是否监听端口:

[[email protected] nginx]# netstat -apn | grep 8080:

(4)测试连接目标端口:

[[email protected] nginx]# telnet 10.10.100.31 8000
Trying 10.10.100.31...
Connected to 10.10.100.31.
Escape character is ‘^]‘.

(5)在其他客户机上测试连接nginx服务器的8080端口端口:

[[email protected] ~]# telnet 192.168.1.30 8080
Trying 192.168.1.30...
Connected to 192.168.1.30.
Escape character is ‘^]‘.
Connection closed by foreign host.

当然,后面就是在客户机上将原来连接10.10.100.31的地方改成连接nginx服务器的地址,如果业务没有出现问题的话,则说明已经配置完成了

时间: 2024-10-10 15:04:55

nginx1.9+做TCP代理(端口转发)的相关文章

简单测试nginx1.90做TCP协议负载均衡的功能

最近工作中需要做TCP层面的负载均衡,以前网站用的反向代理nginx只支持应用层的负载均衡,对于TCP协议是无能为力的,需要使用LVS(linux虚拟服务器). LVS的特点是高性能和极复杂的配置.对网络环境的要求比较高.最近苦于LVS的配置测试,网上的文档和社区都比较少,按照各种教程配置,TCP报文均无法连通,再往下深究就要去研究公司虚机的网络结构了... 在寻找LVS配置调试方法时,看到一篇最近的文章讲4月28日刚刚发布的nginx1.90,添加了支持TCP协议的负载均衡的,如果只是需要做T

【20180202】使用iptables做MySQL的端口转发

导读:将一个实例上面的MySQL请求转向另外一个MySQL实例上面. 源服务:172.16.3.6:3306 主库 目标服务:172.16.3.7:3306 从库 访问账户: [email protected] 新旧实例以及搭建主从 在源服务上面开启端口转发服务: shell>> sudo vim /etc/sysctl.conf vim>> net.ipv4.ip_forward=1 ##在文件中修改这个选项为1 shell>> sudo sysctl -p shel

TCP服务器端口转发: netsh

服务器端口转发 netsh interface portproxy show all -- 显示所有端口代理参数. netsh interface portproxy set v4tov4 listenport=9090 connectaddress=192.168.56.101 connectport=9080 -- 将本地9090端口改成转发至192.168.56.101的9080端口中. netsh interface portproxy delete v4tov4 listenport=

nginx1.9实现TCP代理转发

##资料 http://nginx.org/download/nginx-1.9.12.tar.gz nginx 限制 https://www.nginx.com/resources/admin-guide/restricting-access-tcp/ upstream https://www.nginx.com/resources/admin-guide/load-balancer/ 动态添加upstream成员 http://nginx.org/en/docs/http/ngx_http_

nginx做tcp代理

user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events {     worker_connections 1024; } http {     log_fo

使用rinetd做端口转发

最近项目上遇到一个需要代理做多个端口转发的需求,考虑到需求只是做tcp的网络转发没有业务需求用nginx比较繁琐,就使用了rinetd,整理记录一下. 一.安装rinetd软件1.wget http://www.boutell.com/rinetd/http/rinetd.tar.gz #下载安装文件:2.tar zvxf rinetd.tar.gz #解压下载到的文件:3.cd rinetd/ #进入到解压目录:4.sed -i 's/65536/65535/g' rinetd.c #将rin

SSH端口转发详解及实例

一.SSH端口转发简介 SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据.但是,SSH还能够将其他TCP端口的网络数据通SSH链接来转发,并且自动提供了相应的加密及解密服务.这一过程也被叫做"隧道"(tunneling),这是因为SSH为其他TCP链接提供了一个安全的通道来进行传输而得名.例如,Telnet ,SMTP ,LDAP这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输.而与此同时,如果工作环境许中的防火墙限制了一些网络端口的使用,但是允许SS

Nginx 配置TCP代理

Nginx 配置TCP代理 nginx 的功能非常强大,其中作为代理服务器是非常常用的功能,但是之前的nginx代理只能做七层代理,也就说是基于应用层面的代理,TCP层面的代理一般会配合haproxy 来使用.但是自从nginx 1.9 以后通过stream模块实现了tcp 代理功能,无需其他软件配合即可实现四层代理和七层代理,即:访问该服务器的指定端口,nginx就可以充当端口转发的作用将流量导向另一个服务器,同时获取目标服务器的返回数据并返回给请求者.nginx的TCP代理功能跟nginx的

Linux中的快速端口转发工具—rinetd

这两天和同事讨论问题的时候知道了一个很好用的NAT工具-rinetd,它是由c实现的一个短小.实用的NTA转发工具,它的官网是在:http://www.boutell.com/rinetd/  [[email protected] src]# wget http://www.boutell.com/rinetd/http/rinetd.tar.gz  [[email protected] src]# tar -zxvf rinetd.tar.gz  [[email protected] src]