我对服务器从外部的可用性存在问题(从本地网络一切正常)。一个关键问题是 http,其中请求被执行,但只有当响应小于一定数量的 KB 时才执行。
- 如果从外部通过浏览器访问,则只响应小于或等于4KB的请求
- 如果通过 wget 从远程服务器访问,则只有当请求小于或等于 256 字节时才会成功
- 如果从 php 访问(通过 file_get_contents 函数),则响应最大为 256kb(如果请求动态 php 文件,如果请求静态 html 文件,则只有 128kbs)
成功和失败尝试的示例:
# wget http://tamtam2.izdelava.si/a.html --12:46:08-- http://tamtam2.izdelava.si/a.html => `a.html' Resolving tamtam2.izdelava.si... done. Connecting to tamtam2.izdelava.si[84.255.203.125]:80...connected. HTTP request sent, awaiting response... 200 OK Length: 255 [text/html] 100%[=====================>] 255 249.02K/s ETA 00:00 12:46:08 (249.02 KB/s) - `a.html' saved [255/255] # wget http://tamtam2.izdelava.si/b.html --12:45:40-- http://tamtam2.izdelava.si/b.html => `b.html' Resolving tamtam2.izdelava.si... done. Connecting to tamtam2.izdelava.si[84.255.203.125]:80...connected. HTTP request sent, awaiting response...
FTP 连接也存在类似的问题,例如,如果访问包含太多文件或子文件夹的目录,连接就会中断。我尝试过不同版本的 apache(甚至 ftp 服务器),但结果总是相同的。在 IIS 服务器中,问题是一样的。
我猜问题出在路由器/防火墙层面,但我无法确定具体原因。有人知道问题可能出在哪里吗?
答案1
在我看来,这听起来像是路径 MTU 发现问题。请查看 Microsoft 的此过程:http://support.microsoft.com/kb/314825
基本上,从服务器计算机尝试使用以下参数 PING 您执行上述测试的计算机:
ping <machine above> -f -l 1472
这将给你返回一个来自无法处理此大小数据包的第一跳的“需要分段”答复。
服务器计算机具有哪种 WAN 连接?例如,DSL 连接的 MTU 通常小于 1500。
您的防火墙设备可能有一个配置选项,可以将 TCP MSS“限制”到 MTU,这样您就不必对服务器计算机的 MTU 进行任何更改。一旦您确定这是 MTU 问题,您就可以寻求基于防火墙的修复。
答案2
看起来边界防火墙配置为限制 HTTP 请求/响应大小。但防火墙为何对不同的客户端 wget、浏览器和 php 脚本有不同的行为尚不清楚。在两端使用 wireshark 来查看每种情况下线路上到底发生了什么。这应该有助于您解决问题。