在Windows2003上Apache和IIS并肩(都听80端口)

有什么好办法做到这一点? 甚至可以做得干干净净?

理想情况下,我想使用包头来决定哪个服务器应该处理请求。 但是,如果有一个更容易/更好的方式让我知道。

两个服务器不可能在同一个IP地址的同一个端口上侦听:由于一个套接字只能由一个进程打开,只有为特定IP /端口组合configuration的第一个服务器才能成功绑定,而第二个将失败。

因此,您将需要一个解决方法来实现你想要的。 最简单的方法是在主IP /端口组合上运行Apache,并使用mod_rewrite为IIS请求路由请求(应该为不同的IP和/或端口configuration)。

请记住,连接到服务器的客户端可以使用其他IP和端口IIS运行:如果只有一个IP地址可用,则应该谨慎select通常不被防火墙阻止的IIS端口(8080可能是一个不错的select,或443,即使你运行的是普通的HTTP而不是SSL)

PS另外,请注意,您需要使用httpcfg修改IIS默认configuration,才能允许其他服务器在同一台服务器上的任何IP地址上的端口80上运行:请参阅Micky McQuade的相关过程的答案…

我发现下面的链接build议有两个独立的IP地址,以便两个端口都可以侦听:(编辑:链接不再工作:www.prismix.com/blog/2006/06/running_apache_and_iis_6_toget.cfm)

有一个警告,你必须在IIS中进行更改,因为套接字池。 以下是基于上述链接的说明:

  1. 从Win2003光盘上的支持工具区域提取httpcfg.exe实用程序。
  2. 停止所有的IIS服务:net stop http / y
  3. 有IIS只监听我为IIS指定的IP地址:httpcfg set iplisten -i 192.168.1.253
  4. 请确保:httpcfg查询iplisten(列出的IP是唯一的IP地址,IIS将监听,没有其他)
  5. 重新启动IIS服务:net start w3svc
  6. 启动Apache服务

对于在一台服务器上只有一个IP地址多个站点的用户,可以通过在每个站点(包括默认站点)的属性中设置TCP端口,将IISconfiguration为侦听80以外的端口(例如8080 )。

在Apache中,启用mod_proxymod_proxy_http ,然后添加一个全部的VirtualHost(毕竟其他),以便请求Apache不明确处理获取“转发”到IIS。

 <VirtualHost *:80> ServerName foo.bar ServerAlias * ProxyPreserveHost On ProxyPass / http://127.0.0.1:8080/ </VirtualHost> 

现在,您可以让Apache为某些网站提供服务,而IIS则为其他用户提供服务,而且与用户没有明显区别

编辑:您的IIS网站不得在其响应中的任何url中包含其端口号,包括标题。

您至less需要mod_proxy和mod_proxy_http,它们都是发行版的一部分(但不是每次都是自动构build的)。 那么你可以看看这里: http : //httpd.apache.org/docs/2.2/mod/mod_proxy.html

虚拟主机上下文中最简单的configuration是:

 ProxyPass /winapp http://127.0.0.1:8080/somedir/ ProxyPassReverse /winapp http://127.0.0.1:8080/somedir/ 

(根据您的web应用程序,实际的configuration可能会变得更加复杂)。这将透明地将winapp /path上的每个请求redirect到Windows服务器,并将结果输出传送回客户端。

注意:注意交付页面中的链接:它们不会被重写,所以如果您通常在您的应用中使用相对链接,您可以节省很多麻烦

 <a href=../pics/mypic.jpg"> 

而不是每个链接通常的整合梦魇:

 <a href="http://myinternalhostname/somedir/crappydesign.jpg"> 

每一次都是几乎不可能的!

重写页面中的链接有mod_proxy_html(不要混淆mod_proxy_http!),但这是另一个故事,也是一个残酷的。

无论是两个不同的IP地址(如推荐)或一个Web服务器反向代理另一个(这是监听端口<> 80)。

例如:Apache侦听端口80,端口8080上的IIS侦听。每个http请求都首先发送到Apache(当然)。 然后,您可以决定将每个请求转发到特定(命名的虚拟)域或每个包含特定目录(例如http://www.example.com/winapp/ )的请求到IIS。

这个概念的好处是,你只有一个服务器听取公众而不是两个,你就像两个不同的服务器一样更灵活。

缺点:一些Web应用程序的devise非常糟糕,真正的麻烦在于整合到反向代理基础架构中。 一个工作的IIS webapp依赖于一个正在工作的Apache,所以我们有一些相互依赖关系。

我看到这是一个相当古老的post,但遇到这个问题寻找答案。 在阅读了一些答案之后,他们似乎很长时间的啰嗦,所以大约5分钟后,我简单地解决了这个问题,如下所示:

Apache的httpd.conf将侦听端口设置为80,将“服务器名称”设置为FQDN / IP:80。

现在,IIS进入pipe理服务> IISpipe理器>“站点”左侧导航下拉菜单>在右侧窗口中select顶行(默认网站),然后绑定在右侧。

现在selecthttp> edit并更改为81并input服务器/ pc的本地IP,并在域中input您的FQDN(www.domain.com)或外部IPclosures。

重新启动两台服务器,确保您的端口在路由器和防火墙上均已打开。

这听起来很长,但真正花了5分钟的时间。 完美的作品。

系统:Windows 8,IIS 8,Apache 2.2

安装Windows 10我有这个问题:apache(ipv4)和假脱机服务(ipv6)听同样的80端口。

我解决了编辑apache httpd.conf文件改变行

听80

听127.0.0.1:80

这不完全正确。 例如,对于HTTP,Windows支持基于URL的端口共享,允许多个进程使用相同的IP地址和端口。

您将需要使用不同的IP地址。 无论是Apache还是IIS,服务器都会抓取基于IP和端口的stream量,而这些stream量都是他们必须听的。 一旦开始监听,它就会使用标题(例如服务器名称)来过滤并确定正在访问哪个站点。 你不能这样做,只会改变请求中的服务器名称