Windows 2003上的Apache和IIS并排(都是监听端口80)

时间:2008-09-20 14:55:06

标签: apache iis networking windows-server-2003

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

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

9 个答案:

答案 0 :(得分:31)

两个服务器都不可能在同一个IP地址上侦听同一个端口:由于单个套接字只能由一个进程打开,因此只有为某个IP /端口组合配置的第一个服务器才能成功绑定,并且第二个会失败。

因此,您需要一种解决方法来实现您的目标。最简单的可能是在主要IP /端口组合上运行Apache,并使用mod_rewrite将IIS的路由请求(应针对不同的IP和/或端口配置)。

请记住,运行的备用IP和端口应该可以连接到连接到服务器的客户端:如果您只有一个可用的IP地址,则应该注意选择一般不通用的IIS端口被防火墙阻止(8080可能是一个不错的选择,或443,即使您运行常规HTTP而不是SSL)

P.S。此外,请注意,您需要使用httpcfg修改IIS默认配置,然后才允许其他服务器在同一服务器上的任何IP地址上的端口80上运行:请参阅Micky McQuade对此过程的回答... < / p>

答案 1 :(得分:27)

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

有一点需要注意,由于套接字池,你必须在IIS中进行更改。以下是基于以上链接的说明:

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

答案 2 :(得分:13)

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

在Apache中,启用8080mod_proxy,然后添加一个全能的VirtualHost(在所有其他虚拟主机之后),以便Apache未明确处理的请求被“转发”到IIS。

mod_proxy_http

现在,您可以让Apache为某些站点提供服务,而IIS可以为其他站点提供服务,但对用户没有明显区别。

修改:您的IIS网站不得在其回复中的任何网址中包含其端口号,包括标题。

答案 3 :(得分:3)

你至少需要mod_proxy和mod_proxy_http这两者都是发行版的一部分(但不是每次都自动构建)。然后你可以看看这里:http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

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

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

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

(根据您的webapp,实际配置可能会变得更复杂。) 这会透明地将路径winapp /上的每个请求重定向到Windows服务器,并将结果输出传回客户端。

注意:处理已发送页面中的链接:它们不会被重写,因此如果您通常在应用中使用相对链接,则可以节省很多麻烦,例如

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

而不是通常的整合噩梦,每个链接都是绝对的:

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

LATTER几乎每次都很糟糕!

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

答案 4 :(得分:2)

两个不同的IP地址(如推荐)或一个Web服务器反向代理另一个(正在侦听端口&lt;&gt; 80)。

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

这个概念的优点是你只有一台服务器在听公众而不是两台服务器,你就像两台不同的服务器一样灵活。

缺点:一些Web应用程序设计得很糟糕,并且难以集成到反向代理基础架构中。一个工作的IIS webapp依赖于一个有效的Apache,所以我们有一些相互依赖。

答案 5 :(得分:0)

我认为这是一个很老的帖子,但遇到这个寻找这个问题的答案。在阅读了一些答案之后,他们看起来很长时间,所以在大约5分钟后我设法解决了这个问题的原因如下:

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

现在为IIS转到管理服务&gt; IIS管理器&gt;左侧导航栏中的“站点”下拉&gt;在右侧窗口中选择顶行(默认网站),然后选择右侧的绑定。

现在选择http&gt;编辑并更改为81并输入服务器/ PC的本地IP,并在域中输入您的FQDN(www.domain.com)或外部IP关闭。

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

这听起来很长,但实际上花了5分钟的时间。效果很好。

系统: Windows 8,IIS 8,Apache 2.2

答案 6 :(得分:0)

安装Windows 10我遇到了这个问题:apache(ipv4)和后台处理程序服务(ipv6)监听相同的80端口。

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

的问题

听80

收听127.0.0.1:80

答案 7 :(得分:0)

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

答案 8 :(得分:-1)

您需要使用不同的IP地址。无论是Apache还是IIS,服务器都会根据IP和端口来捕获流量,而IP和端口也是必然要监听的。一旦它开始监听,它就会使用标题(例如服务器名称)来过滤并确定正在访问的站点。您只能在请求中更改服务器名称