我们托管着客户的 Debian Linux 网络服务器。它运行着基于 PHP 的网络应用程序。
该服务器位于我们的防火墙后面,具有自己的虚拟接口,并且端口 80 在内部转发到位于 DMZ 中的机器。
我们遇到的问题是,当数据发布到服务器时,某些用户似乎会遇到截断的情况。对于同一台机器上的某些用户来说,这种情况是可以重现的。但同一个用户在另一台电脑上通过同一个局域网发送相同的数据时,它就可以正常工作。
有人告诉我数据被削减到大约 1140 字节。
知道为什么会发生这种情况吗?客户指责我们的防火墙,但我们的其他服务肯定也存在问题。我怀疑这是网站本身的问题。关于如何隔离问题的建议会有所帮助。
我们的防火墙是 Astaro。
编辑:一位客户在服务器上将以太网帧大小临时设置为 500 字节。这暂时让它正常工作了!我知道有些客户正在使用运行 PPPoE 的互联网提供商
答案1
为了消除防火墙,我会尝试直接从服务器使用 curl 进行测试 POST。 这StackOverflow 上的帖子给出了如何使用的示例curl -F <filename>
。
答案2
我首先要查看的是 apache/php 日志文件(如果可能的话,甚至增加那里的日志级别)。如果数据在某个点被切断,则可能是超时(客户使用不良连接?某处出现流量瓶颈?)或缓冲区设置(这不太可能,因为没有固定的模式)。
如果日志不能为您提供太多信息,那么另一种方法是,如果您发现可重现的案例,则设置嗅探器(tcpdump / wireshark)来捕获流量并分析网络上传输的内容。
答案3
我喜欢用这个免费 http post 工具测试发送帖子请求并获取帖子响应
答案4
事实证明,问题是由我们的防火墙引起的。我认为它弄乱了帧大小并丢弃了超过某个值的帧。最终的解决方案是将服务器移到防火墙外部。
由于服务器本身是 Linux,并且用于非常特定的应用程序,因此 iptables 配置为仅允许端口 80、433 和端口 22。并且端口 22 仅响应某些静态源地址。
我们没有再遇到任何问题。