为什么我不应该在端口80上运行我的非Web服务器软件?

时间:2008-12-18 02:22:08

标签: sockets tcp client-server

考虑到世界上有这么多严苛的防火墙,我有什么理由不在端口80上运行服务器软件来保证最大的可访问性吗?似乎最常见的防火墙例外是允许端口80上的出站连接。我知道任何类型的数据包检查仍然会阻止我的非HTTP流量,但如果是这种情况我肯定防火墙不会有任何其他开放的传出端口无论如何。

如果服务器在端口80上已有网络服务器,则可以使用某种虚拟主机侦听端口80(即myDomain.com:80 myApp.myDomain.com:80 on同一台机器)?

5 个答案:

答案 0 :(得分:7)

如果您需要这样做,为什么不用SOAP接口或HTTPHandler包装网络通信代码?

然后您的数据包将符合HTTP,您将通过防火墙,每个人都很高兴吗?

解决从多用途端口80获得的所有安装和操作问题要容易得多。

答案 1 :(得分:2)

我可以想到两个原因:第一,如果你是为了绕过公司防火墙而违反安全策略,那么你将会使用reserved port作为协议它未注册可能会导致与试图与您的系统进行交互的客户(例如Google)发生重大混淆,以及当您的应用程序出现重大问题时。

编辑在Unix系统上,编号较低的端口需要运行特权帐户。这是避免在该环境中执行此操作的另一个原因,因为您的应用程序可能需要比其他要求更高的权限。

答案 2 :(得分:1)

回答第二个问题“是否可以使用某种虚拟主机侦听端口80”:

是的,有,它称为虚拟主机,由大多数现代网络服务器处理。但是,您的应用程序的所有请求必须从HTTP协议1.1开始,其中指定了主机。您的应用程序可能必须是CGI应用程序。但那可能不是你想要的。

另一种方法是让您的应用程序控制端口80并将所有http查询重定向到Web服务器。它很乱,如果你的应用程序出现问题,那么网络服务器也是如此。

解决方案是在您的服务器上拥有多个IP地址(您可以在一个NIC上绑定多个IP地址)。然后,您可以将地址1处的mydomain.com:80绑定到Web服务器,将地址2处的myapp.mydomain.com绑定到应用程序,但它们仍然位于同一服务器上。

回答你的第一个问题:“我有什么理由不在端口80上运行服务器软件”: 是的,这是不好的做法。期望通过自动扫描获得大量的http查询。您可以选择使用正确的http-header来回答它们或忽略它们。

答案 3 :(得分:1)

无法为在端口80上侦听的其他域执行虚拟主机。只有一个进程可以侦听端口。虚拟主机基于HTTP头在应用层发生。

您可能遇到的另一个问题是代理服务器。不是用户设置的排序,而是公司或ISP的自动代理。这些将无法理解您的应用程序的协议,并可能会失败。

最后,如果您的应用程序在Unix / Linux版本上运行,则端口80将需要root权限。

答案 4 :(得分:0)

我承认,通过让ssh服务器在端口80回家并使用 ssh隧道提供对其他服务器和服务的访问来解决严重防火墙问题。我赶紧补充说,我是在管理防火墙的人的祝福下做到的 - 我们都同意这是解决当前问题的最佳方法。

我赶紧补充说,这种策略使端口80无法用于其预期目的,这对我来说很好,因为它无论如何都是我的个人工作站。如果您的域中只有一台计算机,则会出现问题。但是有一台我可以专门从端口80为ssh提供服务的机器创建了没有安装或操作问题。我刚刚运行了/etc/init.d/apache stop,然后运行了sshd来收听端口80.然后我很乐意去这几个月我需要这样做。

敲击我个人工作站80端口的自动扫描仪可能会挂起: - )