为什么不能在端口80上运行非Web服务器软件?

5
考虑到世界上有那么多严格的防火墙,是否有任何理由我不应该在80端口上运行服务器软件以确保最大可能的可访问性?似乎最常见的防火墙例外是允许在80端口上进行出站连接。我知道任何形式的数据包检查仍然会阻止我的非HTTP流量,但如果是这种情况,我相信防火墙也不会有其他开放的出站端口。
如果服务器已经在80端口上有一个Web服务器,是否可以使用某种虚拟主机来监听80端口(即在同一台机器上同时使用myDomain.com:80和myApp.myDomain.com:80)?
5个回答

7
如果您需要这样做,为什么不只是使用SOAP接口或HTTP处理程序来包装您的网络通信代码呢?
然后您的数据包将符合HTTP协议,您可以通过防火墙,每个人都会很高兴。
这比解决多用途端口80所带来的所有安装和操作问题要容易得多。

没问题。即使是通过HTTP传输二进制数据也可以。HTTP是一种非常适合的线路格式。 - Frank Krueger
通过HTTP发送二进制数据会损失多少性能?如果不是太糟糕的话,这可能是可行的方法。某种类型的HTTP压缩系统是否有助于提高性能? - Luke
@Luke:这取决于您传输的信息量。HTTP头为每个请求添加一个小标题。但是,如果您的请求只打开一次,则可以忽略不计。 - some
我有一个应用程序,可以分发 >50MB 的远程数据库更新。我使用 DEFLATE 进行压缩,并通过 HTTPHandler 发送它们。非常快速且对防火墙透明。 - WOPR

2
我能想到两个原因:首先,如果你这样做是为了绕过公司的防火墙,那么你将违反安全政策;其次,你将使用一个未注册的协议的保留端口,这可能会给试图与你的系统交互的客户(比如谷歌)带来重大困惑,并给你的应用程序带来重大麻烦。在Unix系统上,低编号的端口需要特权帐户才能运行。这也是避免在该环境中执行此操作的另一个原因,因为你的应用程序可能需要比其他情况下更高的权限。

您的编辑仅适用于*NIX类型系统;据我所知,微软尚未实施此类限制。只是为了澄清,低编号是指1024以下的任何内容。 - Matthew Scharley
1
@monoxide -- 已修复。尽管我现在是一名C#/.NET程序员,但在我的内心深处,我仍然是一个Unix人。 - tvanfosson

1

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

是的,有这样的方法,它被称为虚拟主机,并由大多数现代Web服务器处理。但是,你的应用程序所有请求都必须以HTTP协议1.1开头,其中指定了一个主机。你的应用程序可能需要是一个CGI应用程序。但那可能不是你想要的。

另一种方法是让你的应用程序控制端口80并将所有http查询重定向到Web服务器。这很混乱,如果你的应用程序崩溃,Web服务器也会崩溃。

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

回答你的第一个问题:“是否有任何理由我不应该在端口80上运行服务器软件”:是的,这是不好的做法。你应该期望从自动扫描中获得大量的http查询。你可以选择用正确的http头回答它们或忽略它们。


1

在端口80上监听其他域名的虚拟主机是不可能的。一个端口只能被一个进程监听。基于HTTP头,虚拟主机在应用程序层面上发生。

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

最后,如果你的应用程序在Unix/Linux变体上运行,端口80将需要root权限。


0

我承认曾经通过在家中让ssh服务器监听80端口并使用ssh隧道提供对其他服务器和服务的访问来绕过一道严格的防火墙。我急于补充说,这是在防火墙管理员的祝福下完成的——我们都认为这是解决手头问题的最佳方案。

我急于补充说,这种策略使80端口无法实现其预期目的,但对我来说没关系,因为那是我的个人工作站。如果您的域中只有一台机器,这可能会成为一个问题。但是,我可以专门为ssh服务提供从80端口出发的机器,没有安装或操作问题。我只需运行/etc/init.d/apache stop,然后运行sshd以监听80端口。然后,在我需要这样做的几个月内,我就可以开始工作了。

自动扫描程序来到我的个人工作站的80端口时,可以去死了 :-)


是的,我也做过同样的事情,但我从提供一个绝佳服务的角度考虑(该服务恰好不在HTTP之上),使其可用于可能不知道如何通过SSH进行隧道的用户。 - Luke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接