190 lines
5.2 KiB
Plaintext
190 lines
5.2 KiB
Plaintext
|
|
========================================
|
|||
|
|
解决Postman无法连接公网IP的问题
|
|||
|
|
========================================
|
|||
|
|
|
|||
|
|
一、问题诊断
|
|||
|
|
-----------
|
|||
|
|
从Postman截图可以看到错误: "Could not get any response"
|
|||
|
|
这表明是网络连接问题,而不是认证问题。
|
|||
|
|
|
|||
|
|
检查结果:
|
|||
|
|
✓ 服务器正在运行 (监听在 :::8039)
|
|||
|
|
✓ 本地localhost可以访问
|
|||
|
|
✗ 公网IP 101.43.95.130:8039 无法访问
|
|||
|
|
|
|||
|
|
二、可能的原因
|
|||
|
|
-------------
|
|||
|
|
|
|||
|
|
1. 防火墙未开放8039端口 (最可能)
|
|||
|
|
2. 云服务器安全组未开放8039端口
|
|||
|
|
3. 服务器只监听在localhost,未绑定到公网IP
|
|||
|
|
|
|||
|
|
三、解决方案
|
|||
|
|
-----------
|
|||
|
|
|
|||
|
|
【方案1: 开放防火墙端口 (推荐)】
|
|||
|
|
|
|||
|
|
如果使用firewalld:
|
|||
|
|
sudo firewall-cmd --permanent --add-port=8039/tcp
|
|||
|
|
sudo firewall-cmd --reload
|
|||
|
|
sudo firewall-cmd --list-ports # 验证端口已添加
|
|||
|
|
|
|||
|
|
如果使用iptables:
|
|||
|
|
sudo iptables -A INPUT -p tcp --dport 8039 -j ACCEPT
|
|||
|
|
sudo service iptables save # CentOS 6
|
|||
|
|
# 或
|
|||
|
|
sudo iptables-save > /etc/sysconfig/iptables # CentOS 7
|
|||
|
|
|
|||
|
|
【方案2: 配置云服务器安全组】
|
|||
|
|
|
|||
|
|
如果使用腾讯云/阿里云等云服务器:
|
|||
|
|
1. 登录云服务器控制台
|
|||
|
|
2. 找到"安全组"配置
|
|||
|
|
3. 添加入站规则:
|
|||
|
|
- 协议: TCP
|
|||
|
|
- 端口: 8039
|
|||
|
|
- 源: 0.0.0.0/0 (允许所有IP访问)
|
|||
|
|
- 或限制为特定IP
|
|||
|
|
|
|||
|
|
【方案3: 临时关闭防火墙测试】
|
|||
|
|
|
|||
|
|
仅用于测试,生产环境不推荐:
|
|||
|
|
sudo systemctl stop firewalld # 临时关闭
|
|||
|
|
# 测试完成后记得开启
|
|||
|
|
sudo systemctl start firewalld
|
|||
|
|
|
|||
|
|
四、验证步骤
|
|||
|
|
-----------
|
|||
|
|
|
|||
|
|
1. 开放端口后,在服务器上测试:
|
|||
|
|
curl http://localhost:8039/appLogin -X POST \
|
|||
|
|
-H "Content-Type: application/x-www-form-urlencoded" \
|
|||
|
|
-d "username=admin&password=admin123"
|
|||
|
|
|
|||
|
|
2. 从外部测试 (使用另一台机器或手机):
|
|||
|
|
curl http://101.43.95.130:8039/appLogin -X POST \
|
|||
|
|
-H "Content-Type: application/x-www-form-urlencoded" \
|
|||
|
|
-d "username=admin&password=admin123"
|
|||
|
|
|
|||
|
|
3. 在Postman中测试:
|
|||
|
|
- Method: POST
|
|||
|
|
- URL: http://101.43.95.130:8039/appLogin
|
|||
|
|
- Headers: Content-Type: application/x-www-form-urlencoded
|
|||
|
|
- Body: username=admin&password=admin123
|
|||
|
|
|
|||
|
|
五、快速修复命令
|
|||
|
|
--------------
|
|||
|
|
|
|||
|
|
【CentOS 7 (firewalld)】
|
|||
|
|
sudo firewall-cmd --permanent --add-port=8039/tcp
|
|||
|
|
sudo firewall-cmd --reload
|
|||
|
|
echo "端口8039已开放"
|
|||
|
|
|
|||
|
|
【验证端口是否开放】
|
|||
|
|
sudo firewall-cmd --list-ports | grep 8039
|
|||
|
|
# 应该显示: 8039/tcp
|
|||
|
|
|
|||
|
|
【如果使用iptables】
|
|||
|
|
sudo iptables -I INPUT -p tcp --dport 8039 -j ACCEPT
|
|||
|
|
sudo service iptables save
|
|||
|
|
|
|||
|
|
六、云服务器安全组配置
|
|||
|
|
--------------------
|
|||
|
|
|
|||
|
|
【腾讯云】
|
|||
|
|
1. 登录腾讯云控制台
|
|||
|
|
2. 云服务器 → 安全组
|
|||
|
|
3. 选择对应的安全组
|
|||
|
|
4. 入站规则 → 添加规则
|
|||
|
|
- 类型: 自定义
|
|||
|
|
- 来源: 0.0.0.0/0
|
|||
|
|
- 协议端口: TCP:8039
|
|||
|
|
- 策略: 允许
|
|||
|
|
|
|||
|
|
【阿里云】
|
|||
|
|
1. 登录阿里云控制台
|
|||
|
|
2. 云服务器ECS → 网络与安全 → 安全组
|
|||
|
|
3. 配置规则 → 入方向 → 添加安全组规则
|
|||
|
|
- 端口范围: 8039/8039
|
|||
|
|
- 授权对象: 0.0.0.0/0
|
|||
|
|
- 协议类型: TCP
|
|||
|
|
|
|||
|
|
七、测试连接脚本
|
|||
|
|
--------------
|
|||
|
|
|
|||
|
|
创建测试脚本 test_public_access.sh:
|
|||
|
|
|
|||
|
|
#!/bin/bash
|
|||
|
|
echo "测试公网访问..."
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 测试1: 检查端口是否开放
|
|||
|
|
echo "1. 检查端口8039是否开放:"
|
|||
|
|
timeout 3 bash -c "</dev/tcp/101.43.95.130/8039" && echo "✓ 端口开放" || echo "✗ 端口未开放或无法访问"
|
|||
|
|
|
|||
|
|
# 测试2: 测试HTTP连接
|
|||
|
|
echo ""
|
|||
|
|
echo "2. 测试HTTP连接:"
|
|||
|
|
curl -v --connect-timeout 5 http://101.43.95.130:8039/appLogin \
|
|||
|
|
-X POST \
|
|||
|
|
-H "Content-Type: application/x-www-form-urlencoded" \
|
|||
|
|
-d "username=admin&password=admin123" 2>&1 | head -20
|
|||
|
|
|
|||
|
|
八、常见问题
|
|||
|
|
-----------
|
|||
|
|
|
|||
|
|
Q1: 开放端口后仍然无法访问
|
|||
|
|
A1: 检查云服务器安全组是否也开放了端口
|
|||
|
|
|
|||
|
|
Q2: 如何确认是防火墙问题还是安全组问题?
|
|||
|
|
A2:
|
|||
|
|
- 临时关闭防火墙测试: sudo systemctl stop firewalld
|
|||
|
|
- 如果关闭防火墙后可以访问,说明是防火墙问题
|
|||
|
|
- 如果仍然无法访问,说明是安全组问题
|
|||
|
|
|
|||
|
|
Q3: 服务器内网IP可以访问吗?
|
|||
|
|
A3: 如果服务器内网IP是 10.0.4.13,可以尝试:
|
|||
|
|
http://10.0.4.13:8039/appLogin
|
|||
|
|
(仅在同一局域网内可访问)
|
|||
|
|
|
|||
|
|
Q4: 如何查看当前开放的端口?
|
|||
|
|
A4:
|
|||
|
|
sudo firewall-cmd --list-ports # firewalld
|
|||
|
|
sudo netstat -tlnp | grep 8039 # 查看监听端口
|
|||
|
|
sudo ss -tlnp | grep 8039 # 另一种方式
|
|||
|
|
|
|||
|
|
九、完整操作流程
|
|||
|
|
--------------
|
|||
|
|
|
|||
|
|
1. 开放防火墙端口:
|
|||
|
|
sudo firewall-cmd --permanent --add-port=8039/tcp
|
|||
|
|
sudo firewall-cmd --reload
|
|||
|
|
|
|||
|
|
2. 配置云服务器安全组 (如果使用云服务器)
|
|||
|
|
|
|||
|
|
3. 验证端口开放:
|
|||
|
|
sudo firewall-cmd --list-ports | grep 8039
|
|||
|
|
|
|||
|
|
4. 测试连接:
|
|||
|
|
curl http://101.43.95.130:8039/appLogin -X POST \
|
|||
|
|
-H "Content-Type: application/x-www-form-urlencoded" \
|
|||
|
|
-d "username=admin&password=admin123"
|
|||
|
|
|
|||
|
|
5. 在Postman中测试
|
|||
|
|
|
|||
|
|
十、注意事项
|
|||
|
|
-----------
|
|||
|
|
|
|||
|
|
1. 生产环境建议限制访问IP,不要开放给所有IP (0.0.0.0/0)
|
|||
|
|
2. 如果使用HTTPS,需要开放443端口
|
|||
|
|
3. 定期检查防火墙规则,确保安全
|
|||
|
|
4. 建议使用Nginx反向代理,而不是直接暴露应用端口
|
|||
|
|
|
|||
|
|
========================================
|
|||
|
|
如果问题仍然存在,请检查:
|
|||
|
|
1. 云服务器安全组配置
|
|||
|
|
2. 服务器网络配置
|
|||
|
|
3. 服务器是否在运行
|
|||
|
|
4. 端口是否被其他程序占用
|
|||
|
|
========================================
|