我们有两个站点,每个站点的 IP 都只使用端口 80,还有一个 SVN 存储库,其中一个 IP 上使用 443。当我尝试为其中一个站点(使用未被 SVN 使用的 IP)设置 SSL 时,它拒绝启动,因为它声称 443 已被使用,尽管它应该使用完全独立的 IP。
我们有一个运行 IIS 6 的 Windows Server 2003 x64 Web 服务器。我们有两个域,每个域都映射到自己的 IP。假设站点 A 映射到 1.1.1.1,站点 B 映射到 2.2.2.2。SVN 设置为监听 1.1.1.1:443,而站点 A 和 B 分别监听 1.1.1.1:80 和 2.2.2.2:80。这工作得很好,直到我尝试设置站点 B 监听 2.2.2.2:443,在这种情况下,站点 B 将无法启动,如上所述。如果我停止 SVN,那么我可以启动 Web 服务(包括 2.2.2.2:443 上的服务),但是当我再次尝试启动 SVN 时,它会给出相同的基本“已在使用中”错误。但是,虽然它们都在监听端口 443,但它们是在不同的 IP 上进行的,我认为这应该可以工作。
我使用过netstat
,发现 SVN 确实在监听 1.1.1.1:443,而不是 0.0.0.0:443(我想这意味着它正在监听所有 IP?)。它之前配置为监听“任何”IP,我以为通过将其设置为仅监听 1.1.1.1 可以解决我的问题,但进行这种更改没有效果。其他任何 IP 都没有监听 443。同样,在 IIS 中设置的两个站点设置为仅查找各自的 IP,而不是“任何未分配的 IP”,当我将站点 B 设置为在端口 443 使用 SSL 时,我同样将其限制为仅 IP 2.2.2.2。
考虑到我可以得到任何一个网络服务或者SVN 可以正常运行,但不能同时运行,这似乎很明显,它们相互冲突。但它们各自的 IP 难道不应该解决该冲突吗?
答案1
建议对 SVN 使用端口 8443,它就像一个辅助 SSL 端口。它类似于端口 8080 到 80。那么将端口 443 分配给网站应该不会有任何问题。
确保您的路由器将 SVN 的端口转发设置为 8443
您也可以在安全端口 22 上使用 SVN+ssh
答案2
好吧,我不想回答我自己的问题,但我似乎找到了一个解决办法,尽管我怀疑这是否是一个通用的解决方案。
此知识库文章似乎引用了我的确切问题:
IIS 6.0 中有两个网站。网站 1 绑定到 10.10.10.2:80 以进行 HTTP 通信。网站 1 还绑定到 10.10.10.2:443 以进行 SSL 通信。网站 2 仅绑定到 10.10.10.3:80 以进行 HTTP 通信。
在这种情况下,当您使用 netstat 命令查看计算机正在侦听的端口时,您可能会注意到 IIS 6.0 在两个 IP 地址上都绑定到端口 80 和端口 443。
根据他们的解决方案,我必须向注册表添加一个新值。因此,在注册表项下HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
,我必须添加 DWORD 值DisableEndpointSharing
,并将其设置为1
。他们的解决方案的第二部分不适用(运行httpcfg query iplisten
告诉我 IP 侦听列表已经为空)。
添加上述注册表值并重新启动 IIS 后,站点 B 现在显示为netstat
绑定到 2.2.2.2:443 而不是 0.0.0.0:443,并且我可以启动绑定到 1.1.1.1:443 的 SVN 而不会出现任何问题。
因此,至少在这种情况下,我认为这只是一个已知问题,可以通过某种方式应用于我们的配置。