nginx反向代理websocket,端口转发,附服务维护界面配置
- 记录一次线上优化问题。
- 需求:总部要求我方服务器只对外暴露80接口,防止恶意攻击,隐藏聊天服务器端口。
- 现状:目前我们线上配置即时通讯聊天服务器端口为9999端口,tomcat为80端口。
- 解决方案:nginx监听80端口,线上tomcat服务器改为8080端口,nginx配置如下,当遇到后缀为socket.io的转发到999端口,否则转发8080端口。这样就可以统一对外暴露80端口。详细配置如下图。
- 附文如果服务宕机或者维护时配置14-20行代码如下。
- 代理websocket如下,目前项目配置文件为 socketio.url=http://127.0.0.1去除9999端口,如果websocket启动正常,即可证明代理成功。
- 配置文件如图 此时已经去掉9999端口
启动ws如图前后对比带9999端口和不带的图
结果证明:前后启动9999和不带9999的聊天服务器状态码都返回101,证明转发是成功的。这样已经可以隐藏聊天服务器的端口。
- 维护界面效果如下图
- 服务如果正常启动下图所示
遗留问题:目前nginx的做负载均衡,遇到如下问题,用户图片,文件的显示问题,目前线上设置nginx,ip_hash方案是不可行的,最初设置ip_hash是为了解决文件上传和下载不在一台服务器上的问题。但是后续需要一个问题,移动端用户的ip是一直变化的,如果按照目前的方案解决,同一个移动用户很大可能是看不到自己的历史图片和文件的,目前线上单台裸奔。