有什么好方法可以做到这一点?甚至可以干净利落地做?
理想情况下,我想使用数据包标头来决定哪个服务器应该处理请求.但是,如果有更简单/更好的方式让我知道.
两个服务器都不可能在同一个IP地址上侦听同一个端口:由于单个套接字只能由一个进程打开,因此只有为某个IP /端口组合配置的第一个服务器才会成功绑定,第二个服务器将成功绑定将失败.
因此,您需要一种解决方法来实现您的目标.最简单的可能是在主IP /端口组合上运行Apache,并使用mod_rewrite将IIS的路由请求(应该为不同的IP和/或端口配置).
请记住,运行的备用IP和端口应该可以连接到连接到服务器的客户端:如果只有一个可用的IP地址,则应该注意选择一般不被防火墙阻止的IIS端口(8080可能是一个不错的选择,或443,即使您运行常规HTTP而不是SSL)
PS此外,请注意,您需要使用httpcfg修改IIS默认配置,然后才能允许其他服务器在同一服务器上的任何IP地址的端口80上运行:请参阅Micky McQuade的答案,了解执行该操作的过程...
我发现以下链接建议有两个单独的IP地址,以便两者都可以侦听端口80 :(编辑:链接不再有效:www.prismix.com/blog/2006/06/running_apache_and_iis_6_toget.cfm)
有一点需要注意,由于套接字池,你必须在IIS中进行更改.以下是基于以上链接的说明:
从Win2003 CD上的支持工具区域中提取httpcfg.exe实用程序.
停止所有IIS服务:net stop http/y
让IIS只监听我为IIS指定的IP地址:httpcfg set iplisten -i 192.168.1.253
确保:httpcfg查询iplisten(列出的ip是IIS将监听的唯一IP地址,而不是其他的)
重启IIS服务:net start w3svc
启动Apache服务
对于在一台服务器上只有一个IP地址和多个站点的用户,可以将IIS配置为侦听除其他端口以外的端口80
,例如,8080
通过在每个站点的属性中设置TCP端口(包括默认端口).
在Apache中,启用mod_proxy
和mod_proxy_http
,然后添加一个包罗万象的虚拟主机(所有其他后),以便请求Apache不明确处理GET"转发"到IIS.
ServerName foo.bar ServerAlias * ProxyPreserveHost On ProxyPass / http://127.0.0.1:8080/
现在,您可以让Apache为某些站点提供服务,而IIS则为其他站点提供服务,而对用户没有明显的区别
编辑:您的IIS站点不得在其响应中的任何URL中包含其端口号,包括标头.