这个问题包括ServerFault.com和这里,但这似乎比服务器更多的编程。我设置我的家用电脑来运行Apache服务器。它回答端口5900,它已从我的无线路由器转发端口。然后,我设置了一个动态DNS服务器,以不断更新我的家庭网络的IP地址。我知道该部分有效,因为我在不同的无线网络上使用了不同的计算机,并且能够使用MYURL.com:5900访问我的服务器的索引页。
我的目标是现在向我的家庭服务器发送消息。我在我的家庭服务器上编写了一个脚本,如果我发送一条POST消息,它会将该消息保存到文件中。换句话说,一系列事件应该是这样的:
我知道如何做1,2和4.我一直试图让3工作而不能。我甚至无法让CURL读取我的家庭服务器的index.html。这是我用过CURL(使用PHP)的代码:
$string = 'http://MYURL.com';
echo "sending to " . $string . '<br/>';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PORT, 5900);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
$response = curl_exec($ch);
if(curl_error($ch))
{
echo curl_error($ch);
}
echo $response;
curl_close($ch);
我使用google.com和默认端口对此进行了测试,并且运行正常。它回应了谷歌给我的HTML。但是,当我在家庭服务器的DNS上运行它时,它总是超时。当我没有添加时间时,它说它无法连接。这是使用完全相同的URL,当放入浏览器时,正确地向我发送我的家庭服务器的index.html。
有谁知道出了什么问题?此外,如果有更好的方法来做到这一点,它是什么?
我知道这是一个很长的问题,所以非常感谢你。
探
答案 0 :(得分:5)
你从哪里测试这个?如今,大多数网络严重受到防火墙的限制,并且不允许与奇怪端口的外向连接。你的5900端口当然有点奇怪。
您使用无线(我假设3G?)网络的测试原因是因为PC /笔记本电脑恰好直接连接到互联网,因此不会被防火墙阻挡。
测试防火墙理论的最简单方法是在端口80上的服务器上设置测试页,并尝试使用CURL访问它。如果可以,那么你知道问题是路由器和代理链上的某个人阻塞你的端口5900。
关于端口80不被视为“奇怪”的原因:
端口80是port conventionally used for HTTP (web server) as assigned by IANA。因此,考虑到人们连接到互联网的主要原因是访问万维网(在HTTP上运行并因此需要打开端口80),因此通常不会阻止它。阻止端口80使互联网无效(好吧,不完全,你还有电子邮件)。如果系统管理员曾阻止端口80,他也可以断开互联网连接。这就是默认端口80未被阻止的原因。
现在,这对你来说意味着什么,家庭服务器管理员。当然,您的IP地址只有一个端口80.这意味着只有一个端口转发规则连接到端口80.这意味着本地网络上只能有一台计算机向外界提供网页* 。如果您的小弟弟或妹妹想要运行另一个 Web服务器,那么他/她将不得不使用另一个端口。
这就是为什么Web服务器被设计为服务多个网页(它们检测URL以便单个端口80可以服务于不同站点)的原因。它允许单个IP地址从一台机器为不同的网站提供服务。 Google:http virtual host
了解更多信息。
*注意:不完全正确,您可以使用负载平衡或重新路由代理将HTTP请求重定向到网络上的其他计算机。但原则仍然是正确的。只有一台机器的端口80可以直接暴露在互联网上。其他人只是代理。
答案 1 :(得分:0)
有时,路由器会阻止您从内部网络访问外部IP地址。
尝试telnet您自己的外部IP并从内部网络访问5900端口,您将看到是否是这种情况。