Nginx配置端口转发 映射 以及连接超时问题

来源:互联网 发布:yii2开源cms推荐 编辑:程序博客网 时间:2024/05/10 03:49

说到端口转发,就不得不提端口映射,这两个的概念比较容易混淆。喜欢较真的同学就去查查概念吧……

知乎有人说:

端口转发:你给我了,我打开看看,发现这上面标志显示是要给张三,那么我就给张三去。如果标志是给李四,那我就再给李四去。

端口映射:你放到我左手,我就直接给张三;你放到我右手,我就直接给李四。这中间我不管你放我手上的是什么东西。

这里我认为应该叫端口映射为好,但是不管是什么都是用了nginx的反向代理模块。

先看图和业务吧

这里写图片描述

上面这个图呢,假设我们这五台服务器在一个集群里面,但是呢,由于集群内防火墙的原因,你的电脑只能连接1号机器,2、3、4、5访问不了,这个时候我们就需要在1号机器做做文章。通过访问1号机器的不同端口,来间接地访问后面的其他机器。

假设五台机器的IP分别是192.168.1.10、192.168.1.20、192.168.1.30、192.168.1.40、192.168.1.50

OK!那我们直接自定义端口映射配置下Nginx就好了呗?

No No No!我们再具体一下我们的需求。

我们把连接类型划分一下:两种。

第一种:http(对应Nginx http模块)

第二种:tcp/udp(对应Nginx stream模块)

比如我们的web项目,需要用浏览器访问的或其他的基于http协议的,要配置在http模块下。

像SSH,FTP这些,需要配置在stream模块下。

先说http,比如我们2号机器上有一只汤姆猫,端口8080,这时候我们就需要在Nginx上添加如下配置:

http{    server{        listen  8888;        location / {            proxy_pass http://192.168.1.20:8080;        }    }}

这段代码的意思就是,指向我1号机器(192.168.1.10:8888)的连接,都映射到192.168.1.20:8080上面。

如果我们3、4、5机器上面有数据库或者需要SSH连接的话,就要使用stream模块。

Demo如下:

stream{    server{        listen  1521;        proxy_timeout 30m;        proxy_pass 192.168.1.30:1521;    }    server{        listen  3306;        proxy_timeout 30m;        proxy_pass 192.168.1.30:3306;    }    server{        listen  4022;        proxy_timeout 30m;        proxy_pass 192.168.1.40:22;    }    server{        listen  5022;        proxy_timeout 30m;        proxy_pass 192.168.1.50:22;    }}

需要访问什么,加上我们自定义的端口号,就大功告成。比如我们要访问3号机器的MySQL,那么我们数据库连接就配置192.168.1.10:3306这样我们就能通过Nginx来轻松访问到192.168.1.30:3306的数据库了。

这里留意一个参数–”proxy_timeout 30m;“

这个参数不写的话,默认连接超时是10min,比如我们使用filezilla,10分钟没有任何动作的话,你的连接就会被干掉,ssh、数据库也是的。这里我保守设置30min,具体看自己的需求。

注意,这个超时并不会影响传输中的数据,比如我们设置成10s,这时候我们从ftp服务器上面下载一个文件,10s没下载完,且你没有任何动作的话,会提示连接已断开,但是实测文件还能继续传输,这应该是传输文件是单独出来的一个连接的缘故。

最后多说一点Nginx的配置。

worker_processes  2;events{    worker_connections  1024;}

这是Nginx必须的配置,第一个参数,作者推荐写成处理器逻辑核心的个数,实际带来的最直观的效果就是,启动Nginx之后,一个主进程,外加这个参数的个数进程。比如我服务器32逻辑核心,我写了32。启动之后,33个nginx.exe,你闹不闹心,反正我是很闹心。我自己做过压力测试,3000+并发,这个参数写2都没任何问题。所以我推荐写2或者4即可。

第二个参数是最大连接数,这个就看具体使用环境了。几千几万都可以。

最后,我们使用它很方便,最好还能监控。

OK!使用ngx_http_stub_status_module

具体的配置写在http模块下

server{        location /basic_status {            stub_status;        }    }

这时候我们访问http://192.168.1.10/basic_status,我们就能看到效果了。 文本如下:

Active connections: 22
server accepts handled requests
453 453 67
Reading: 0 Writing: 1 Waiting: 0

第一个就是当前活动的连接数

下面的三个数值分别是 处理连接数/创建握手数/处理请求数

———————————————————————

嗯……文章中有什么不对或者不妥的地方欢迎提出来

原创粉丝点击