前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >服务器本地端口转发的一种办法

服务器本地端口转发的一种办法

原创
作者头像
easonxie
发布2023-08-07 19:04:21
4860
发布2023-08-07 19:04:21
举报

相信不少朋友公司对外服务的机器上面开放的端口都是有限的,例如只开放80,8080,443端口,这种环境下有时候我们需要调试服务的时候很麻烦,这里记录一下简单解决的一种办法,解决的途径很多,这里只是抛转引玉。

一、背景

对面服务的nodejs进程有内存泄露的情况,服务已经启动对外开发了一段时间了,这时候希望能够debug这个运行中的进程,生成一些heapdump来分析内存泄露的具体位置。针对运行中的nodejs程序,我们可以使用kill命令传递信号来开启nodejs程序的debug模式。

代码语言:javascript
复制
ps -ef //获取nodejs-pid
kill -s SIGUSR1 nodejs-pid // 开启nodejs调试进程

这个时候,通过netstat -tnpl命令,我们可以看到运行中的nodejs代码已经开启了debug模式了,默认监听了9229端口。下一步我们只要在chrome inspect面板上,配置这个ip:9229就可以debug了。

不幸的是,由于运维部门的安全策略,9229端口一般不对外开放。我们需要解决这个问题。

二、解决思路

最简单的办法,我们可以使用ssh来建立隧道,把远程remote的9229端口转发到本地的9229端口上,类似下面这样

代码语言:javascript
复制
ssh -L 9229:localhost:9229 user@remote.host

不过很多公司都不允许通过ssh命令在网络直接打洞,这样会打破网络隔离,有安全方面的风险。最好的办法就是把远程服务上9229端口的流量转发到本地开放的8080端口上。这里推荐使用socat来解决,下面以centos为例子,可以和这么操作

代码语言:javascript
复制
sudo yum install socat //安装socat
sudo socat TCP-LISTEN:8080,fork TCP:localhost:9229 //转发本地9229到本地8080

运行命令后,本地的9229端口就会被代理到本地的8080端口上。需要注意的是,使用socat进行端口转发时,需要保证本地和远程服务器之间的网络连接畅通,否则可能会出现连接失败的问题。同时,需要保证本地和远程服务器之间的防火墙设置正确,以允许端口转发的流量通过。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、解决思路
相关产品与服务
远程调试
远程调试(Remote Debugging,RD)在云端为用户提供上千台真实手机/定制机/模拟器设备,快速实现随时随地测试。运用云测技术对测试方式、操作体验进行了优化,具备多样性的测试能力,包括随时截图和记录调试日志,稳定的支持自动化测试, 设备灵活调度,用例高效执行, 快速定位产品功能和兼容性问题。云手机帮助应用、移动游戏快速发现和解决问题,节省百万硬件费用,加速敏捷研发流程。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com