手把手教你玩转本地服务器多端口映射:从踩坑到真香
大家好,我是33blog的技术小编。今天想和大家分享一个我最近折腾了好几个通宵才搞明白的技术点——本地服务器多端口映射。说实话,这玩意儿刚开始接触时真是让我头大,各种端口冲突、防火墙拦截,差点没把我整崩溃。不过现在终于摸透了,赶紧把经验分享给大家!
为什么我们需要多端口映射?
记得上个月接了个外包项目,需要同时运行前端开发服务器(3000端口)、后端API(8080端口)和数据库管理界面(3306端口)。每次给客户演示时都要说:”先访问这个地址看前端,再打开那个链接测API…” 客户都快被我绕晕了。这时候才意识到:多端口映射真不是装X,而是刚需啊!
Nginx反向代理方案
我最推荐的方式是用Nginx做反向代理,配置起来其实比想象中简单。下面是我的实战配置(请根据实际情况修改):
server {
listen 80;
server_name myapp.local;
location / {
proxy_pass http://localhost:3000;
}
location /api {
proxy_pass http://localhost:8080/;
proxy_set_header Host $host;
}
location /db {
proxy_pass http://localhost:3306/;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
这里有个血泪教训:配置/api路由时,proxy_pass最后的斜杠千万不能少!我就因为这个调试了整整一晚上…
使用SSH隧道(适合临时需求)
有时候客户临时要看一下测试环境,又不想折腾Nginx配置,我就会用SSH隧道这个”救急方案”:
ssh -N -L 本地端口:目标地址:目标端口 用户名@服务器地址
比如把远程MySQL映射到本地:
ssh -N -L 3307:127.0.0.1:3306 user@example.com
这样本地访问3307端口就等于访问服务器的3306端口了。不过要注意,这种方式的连接稳定性取决于SSH会话,适合短时间使用。
Windows用户的福音:netsh命令
如果你是Windows用户(像我一样),可以试试这个隐藏神器:
netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=3000 connectaddress=127.0.0.1
这个命令直接把本地的3000端口映射到了80端口。第一次用的时候我都惊了:原来Windows自带这么强大的端口转发工具! 不过记得要以管理员身份运行CMD哦。
避坑指南
最后分享几个我踩过的坑:
- 防火墙!防火墙!防火墙!重要的事情说三遍
- 端口冲突时可以用
netstat -ano
查看占用情况 - HTTPS证书问题最好用通配符证书解决
- 记得测试内网和外网两种访问情况
折腾完这些后,现在我的开发环境清爽多了,所有服务都通过80/443端口暴露,再也不用记一堆端口号了。如果你也在为多端口烦恼,不妨试试这些方案~
大家如果有更好的解决方案,欢迎在评论区交流!下次见!
Nginx那个斜杠的问题我也遇到过,真的是坑死人啊!