今日公司有一个需求:需要我们的web服务器监听上千个端口
首先说一下我们项目用的是Netty4作为我们的web容器
现在我提供的解决方案有两种
1、直接使用Netty4本身支持的多端口特性,但是要去自己写代码实现,当然代码也非常简单。
优点:非常容易实现
缺点:不够灵活,不能动态添加(动态添加后来研究还是能实现的)减少,需要重启服务
2、通过增加一个代理层,可以使用Nginx或者Apache
下面介绍的是Nginx(因本人使用过几次,比较熟悉),Apache请行研究,本人未使用过
一开始按照之前的使用习惯配置发现要开放多端口就需要配置多个,要是配置上千个端口的增减,这工作量可想而知…
虽然可以通过写个脚本自动生成配置文件,但是配置文件也需要维护。本人很懒,能尽量少维护的事就不要做,继续找资料。网上很多人给的建议是通过itables命令来实现端口转发,也就是Nginx只需要配置一个端口,其它端口通过防火墙转发过来,通过实践是可以实现,但是存在一个问题,就是转发过去的端口再经过Nginx转发到我们的web服务器,发现获取不到真实的端口,只能获取到Nginx监听的端口(不符合老板的需求),只能继续找其它的方法,后面在stackoverflow上面看到一个帖子说Nginx最新版已经支持配置端口区域,果断下载最新的版本,配置好后(配置非常简单,新手小白半个小时也能配置好)运行发现完全满足要求。
https://stackoverflow.com/questions/49170588/large-number-of-port-forwarding-in-nginx
优点:灵活,配置简单,修改配置文件不要重启,命令重新加载配置文件立即生效
缺点:最新版本可能稳定性还存在一定问题