Tomcat 和 IIS 7 都位于不同的 IP 和不同的端口上

Tomcat 和 IIS 7 都位于不同的 IP 和不同的端口上

我在 Windows 2008 服务器上同时安装了 Tomcat 和 IIS 7。该机器有两个 IP(134.133.1.1 和 134.133.2.2)。

我希望 Tomcat 处理134.133.1.1,端口 80以及 IIS 来处理这两者 134.133.2.2,端口 80134.133.1.1,端口 443,但似乎无法将最后两个放在一起(我可以在 IIS 上单独获取其中一个,以及在 Tomcat 上获取第一个 IP 地址)。

我已将 Tomcat 配置为使用此配置成功监听 ip 134.133.1.1,端口为 80;

<Connector port="80" 
    protocol="HTTP/1.1"
    address="134.133.1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

我在 IIS 中还配置了一个站点,绑定到 IP 134.133.1.1,端口为 443(SSL)。当我打开 IIS 后,在 Tomcat 之后,我可以成功访问 134.133.1.1:80(Tomcat)和 134.133.1.1:443(IIS)(如预期)。

现在,当我想通过 IIS 在新的 IP 地址上引入新网站时,问题就出现了。在 IIS 中,我在 IP 134.133.2.2、端口 80 上设置了一个新网站。我无法启动该网站。事件日志显示此错误;

Unable to bind to the underlying transport for [::]:80. The IP Listen-Only list may contain a reference to an interface which may not exist on this machine.  The data field contains the error number.

我认为这是因为 IIS 7 尝试在所有 IP 上侦听端口 80,但无法做到,因为 Tomcat 正在为 134.133.1.1 占用端口 80。从阅读中可以看出,解决方法是指定您希望 IIS 绑定在端口 80 上的 IP 地址。问题是,当我将 134.133.2.2 添加到 iplisten 列表时,当我尝试导航到 134.133.1.1:443 时出现 404。我认为这是因为 IIS 不再监听 134.133.1.1 上的任何端口。

我该如何解决这个问题以便 IIS 返回两个站点?

编辑:根据请求,我对站点 A 的 IIS 绑定为端口 80 (http) 上的 134.133.2.2 和端口 443 上的 134.133.2.2。对于 IIS 中的站点 B,绑定为端口 443 (https) 上的 134.133.1.1。请注意,此示例中的 IP 仅用于举例目的,但与我的设置一致。

答案1

我在 Windows Server 2008 上遇到了同样的问题,尝试在两个单独的网络接口上的端口 80 上运行 Tomcat 和 IIS。为了强制 IIS 仅在特定网络接口上侦听端口 80,您必须遵循以下说明。仅仅更改 IIS 中的站点绑定是不够的。

来自 Microsoft KB 文章 954874:

在 Windows Server 2008 中安装 Internet 信息服务 (IIS) 7.0 时,IIS 会绑定到服务器上的所有 IP 地址,而不仅仅是分配给网站的 IP 地址。即使您已将 IIS 配置设置中的 DisableSocketPooling 元数据库属性设置为 True,也可能会出现此行为。

要解决此问题,请使用 Netsh 命令提示符实用程序在 Windows Server 2008 中配置 IP 侦听列表。

netsh http 添加 iplisten xxx.xxx.xx

来源:http://support.microsoft.com/kb/954874

答案2

不要用来iplisten为 IIS 分配 IP 地址。

只需对每个站点使用绑定即可。iplisten将 IP 地址绑定到 HTTP.sys 服务,这确实会束缚您的手脚。您希望仅让 HTTP.sys 监听 IP 134.133.1.1 上端口 443 的流量以及 IP 134.133.2.2 上端口 80 和 443 的流量。只需将 IP 和端口添加到绑定中,看看这是否能缓解您的问题。

或者,运行netstat -aon并查看 TCP 端口 80 上正在监听的内容。您将获得一个 PID 列表,并且可以将其与任务管理器中的进程名称进行匹配。例如,如果我运行“netstat -aon”,我会得到类似这样的结果:

Proto  Local Address          Foreign Address        State           PID
TCP    172.18.5.23:443        0.0.0.0:0              LISTENING       1268
TCP    172.18.5.23:80         0.0.0.0:0              LISTENING       1268
TCP    172.18.5.24:80         135.25.167.62:443      ESTABLISHED     9652
TCP    172.18.5.24:18462      10.200.40.1:443        ESTABLISHED     7312
TCP    172.18.5.23:18463      10.200.40.1:443        ESTABLISHED     7312

现在,如果我打开任务管理器并查看 PID 行,我可以比较并看到 Tomcat7.exe 的 PID 为 9652,因此它正在监听 TCP 端口 80。比较两个结果。您可能会发现另一个进程正在窃取您该 IP 地址上的端口 80。

相关内容