PHP 别人都没问题,上传自己服务器就curl_exec($ch);超时

发布于 2023-10-21  1054 次阅读


说来也奇怪,我做这个项目已经快三个月了,一直在小心翼翼的调试,想着一次性上传不再需要在服务器灰度调试,但是问题还是来了,而且很奇怪。我在本地测试已经尽可能把程序写得更加通用,但是上传到服务器我就遇到了一个大问题。本以为容易出问题的是一些页面bug,但确是后端出了问题。

在用户点击授权按钮后,页面的js会创建一个post请求访问服务器获取token,但是点击之后却迟迟没有动静。我看了控制台没有任何错误,也看了网络请求,奇怪的是理应出现一个post请求却在f12网络选项中没有看到(始终不明白发生了什么,因为后面我又发现可以看到了)

我看着控制台的请求马上意识到了什么,客户端请求没有得到服务器的响应,但是由于没有设置超时时间,所以控制台没有输出任何的错误,直到大概半分钟后还是浏览器主动断开的连接,这个问题就很奇怪了。因为php本身也有超时主动断开连接的机制为什么这次php始终没有作为,虽然顾虑很深,但是我还是不愿意把问题归于后端,于是我打印了前端返回的信息,包括readyState和status状态,结果是 readyState 返回了4(得到返回), status 得到了502(超时),这样的话说明前端代码没有问题,我不得不把问题归于后端。

但是后端代码调试起来是很麻烦的,因为本地测试没有问题,本地连接测试也没有问题,我反复手动清除缓存一步步调试,不过结果很显然确实是在curl_exec($ch);长时间没有返回任何数据,这就很奇怪了,因为在此前我多次测试过api url确定没有任何问题,当我再次在本地调试api结果也是正常工作。

问题的最后 网络问题 在我脑海浮现,但我依然很纠结,因为两个项目同属一个服务器,原则上访问不应该存在任何问题,但很不巧当我把api从域名改为了内网ip后一切都恢复了正常。但我的疑惑依然没有解决,因为按道理通过dns解析域名得到自身ip,在访问自身外网ip不应该存在问题的,及时饶了一大圈,但速度也不应该慢到哪里去。

因为我的服务器项目部署是这样的:

服务器php项目运行了 等待明天论坛 同时在docker也部署了 catchat ,而catchat在容器内所以我使用的是反向代理来实现域名绑定,然而问题就出在了反向代理。