如何使用公网IP实现跨设备跨网络访问React Native与PHP服务?
排查自有公网IP无法连接React Native与PHP服务器的解决方案
1. 确认公网IP有效性
- 在服务器本地执行
curl ifconfig.me或curl ip.sb获取当前实际公网IP,确保React Native请求使用的IP与该值完全一致(注意区分IPv4/IPv6,部分移动设备默认优先使用IPv6,若服务器仅开启IPv4端口会导致连接失败) - 切换至非本地网络(如手机流量),直接访问
http://[你的公网IP]:[服务器端口],先验证PHP服务器本身是否能被公网访问,排除React Native端的问题
2. 检查服务器防火墙与安全组
- 本地防火墙:Ubuntu系统用
sudo ufw allow [端口号]/tcp开放目标端口;CentOS系统执行sudo firewall-cmd --add-port=[端口号]/tcp --permanent,再运行sudo firewall-cmd --reload重载规则 - 云服务器安全组:若使用阿里云、腾讯云等服务商,需在控制台安全组规则中添加入站规则,允许目标端口的TCP流量,来源设为
0.0.0.0/0(允许所有公网IP访问)
3. 配置端口映射(家庭网络场景)
- 若服务器处于家庭路由器下,需在路由器后台设置端口映射:将公网IP的目标端口,转发至服务器本地局域网IP的对应端口
- 可临时开启路由器的「DMZ主机」功能,将服务器设为DMZ主机测试是否能访问(测试完成后务必关闭,避免安全风险)
4. 调整React Native端网络配置
- 确保应用内请求地址为
http://[公网IP]:[端口],未使用localhost或局域网IP - 安卓端:Android 9及以上系统,需在
AndroidManifest.xml中添加网络权限<uses-permission android:name="android.permission.INTERNET" />,并在application标签内增加android:usesCleartextTraffic="true"(若使用HTTP协议) - iOS端:在
Info.plist中添加App Transport Security例外,允许访问目标公网IP:<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>[你的公网IP]</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> </dict> </dict>
5. 排查运营商网络限制
- 部分运营商会屏蔽80、443等常用端口,或分配的是CGNAT内网型公网IP,此类情况无法直接通过公网IP访问,需联系运营商申请独立公网IP,或改用非标准端口(如8080、3000)测试
- 用
nmap [公网IP] -p [端口]扫描端口状态,若显示filtered说明端口被屏蔽或映射未成功
6. 验证PHP服务器监听地址
- 确保PHP服务器(Apache、Nginx或内置服务器)监听地址为
0.0.0.0而非127.0.0.1,仅监听本地回环地址会导致公网请求无法到达。例如使用PHP内置服务器时,需执行php -S 0.0.0.0:[端口]
内容的提问来源于stack exchange,提问作者Bryan Pogi
相关产品推荐
相关产品推荐

