如果服务器已经在80端口上有一个Web服务器,是否可以使用某种虚拟主机来监听80端口(即在同一台机器上同时使用myDomain.com:80和myApp.myDomain.com:80)?
回答你的第二个问题“是否可以使用某种虚拟主机监听端口80”:
是的,有这样的方法,它被称为虚拟主机,并由大多数现代Web服务器处理。但是,你的应用程序所有请求都必须以HTTP协议1.1开头,其中指定了一个主机。你的应用程序可能需要是一个CGI应用程序。但那可能不是你想要的。
另一种方法是让你的应用程序控制端口80并将所有http查询重定向到Web服务器。这很混乱,如果你的应用程序崩溃,Web服务器也会崩溃。
解决方案是在你的服务器上拥有多个IP地址(你可以在网卡上绑定多个IP地址)。然后,你可以将mydomain.com:80绑定到地址1的Web服务器,将myapp.mydomain.com绑定到地址2的应用程序,但它们仍然在同一台服务器上。
回答你的第一个问题:“是否有任何理由我不应该在端口80上运行服务器软件”:是的,这是不好的做法。你应该期望从自动扫描中获得大量的http查询。你可以选择用正确的http头回答它们或忽略它们。
在端口80上监听其他域名的虚拟主机是不可能的。一个端口只能被一个进程监听。基于HTTP头,虚拟主机在应用程序层面上发生。
你可能会遇到的另一个问题是代理服务器,不是用户设置的那种,而是公司或ISP自动使用的代理服务器。这些服务器将无法理解你的应用程序协议,可能会失败。
最后,如果你的应用程序在Unix/Linux变体上运行,端口80将需要root权限。
我承认曾经通过在家中让ssh服务器监听80端口并使用ssh隧道提供对其他服务器和服务的访问来绕过一道严格的防火墙。我急于补充说,这是在防火墙管理员的祝福下完成的——我们都认为这是解决手头问题的最佳方案。
我急于补充说,这种策略使80端口无法实现其预期目的,但对我来说没关系,因为那是我的个人工作站。如果您的域中只有一台机器,这可能会成为一个问题。但是,我可以专门为ssh服务提供从80端口出发的机器,没有安装或操作问题。我只需运行/etc/init.d/apache stop
,然后运行sshd
以监听80端口。然后,在我需要这样做的几个月内,我就可以开始工作了。
自动扫描程序来到我的个人工作站的80端口时,可以去死了 :-)