Azure Ubuntu VM端口转发技术咨询:无需负载均衡器将8080端口转发至80端口
Azure Ubuntu VM端口转发技术咨询:无需负载均衡器将8080端口转发至80端口
Hey there! 很高兴能帮你搞定这个Azure VM的端口转发问题,不用负载均衡器完全可以实现,下面给你两种实用的本地配置方法,都是在VM内部操作的:
方法一:使用iptables实现端口重定向
这是最轻量化的方式,适合快速实现端口转发:
- 先确认iptables已经安装,Ubuntu默认自带,要是没有的话执行:
sudo apt update && sudo apt install iptables - 添加端口转发规则,把外部访问80端口的请求重定向到8080:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 - 这条规则重启VM后会失效,所以要保存规则:
先创建保存目录(如果不存在的话):
然后保存规则:sudo mkdir -p /etc/iptables
还要设置开机自动加载规则,编辑sudo iptables-save > /etc/iptables/rules.v4/etc/rc.local,在exit 0前添加:
然后给rc.local添加执行权限:iptables-restore < /etc/iptables/rules.v4sudo chmod +x /etc/rc.local - 最后确保系统IP转发功能开启,编辑
/etc/sysctl.conf,找到net.ipv4.ip_forward=1这一行,去掉前面的注释符号#,然后执行:sudo sysctl -p
方法二:使用Nginx反向代理
如果你的IoT项目是基于Web服务的,用Nginx反向代理会更灵活,还能附带一些额外的Web服务功能:
- 安装Nginx:
sudo apt update && sudo apt install nginx - 创建一个新的站点配置文件:
sudo nano /etc/nginx/sites-available/port-forward - 粘贴以下配置内容,把80端口的请求转发到本地8080:
server { listen 80; server_name _; # 匹配所有访问的IP或域名 location / { proxy_pass http://localhost:8080; # 传递必要的请求头,确保后端服务能正确获取客户端信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } - 启用这个配置,创建软链接到sites-enabled目录:
sudo ln -s /etc/nginx/sites-available/port-forward /etc/nginx/sites-enabled/ - 测试配置是否合法:
sudo nginx -t - 如果测试通过,重启Nginx生效:
sudo systemctl restart nginx
重要注意事项
- 不管用哪种方法,都要在Azure的**网络安全组(NSG)**中添加入站规则,允许外部访问80端口(TCP协议),不然外部请求会被Azure的防火墙拦截
- 如果你的VM启用了ufw防火墙,也要确保ufw允许80和8080端口的入站流量,执行:
sudo ufw allow 80/tcp sudo ufw allow 8080/tcp
备注:内容来源于stack exchange,提问作者Htekin
相关产品推荐
相关产品推荐

