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

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

有帮助吗?

解决方案

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

因此,您需要一种解决方法来实现您的目标。最简单的可能是在主IP /端口组合上运行Apache,并使用 mod_rewrite

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

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

其他提示

我发现这篇文章建议有两个独立的IP地址,以便两者都能在端口80上监听。

有一点需要注意,由于套接字池,你必须在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 query iplisten(列出的IP是IIS将监听的唯一IP地址,而不是其他IP地址。)
  5. 重新启动IIS服务:net start w3svc
  6. 启动Apache服务

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

在Apache中,启用mod_proxymod_proxy_http,然后添加一个catch-all VirtualHost(在所有其他虚拟主机之后),以便请求Apache不显式处理get <!> quot; forwarding <!> quot;到IIS。

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

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

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

你至少需要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混淆!),但这是另一个故事,也是一个残酷的故事。

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

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

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

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

我认为这是一个很老的帖子,但遇到这个寻找这个问题的答案。在阅读了一些答案之后,他们看起来很长时间,所以在大约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

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

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

的问题

听80

收听127.0.0.1:80

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top