在运行 IIS 7 的多宿主 Windows Server 2008 上更改 TeamCity IP 地址和端口号

Bra*_* B. 21 windows-server-2008 iis-7 ip teamcity multi-homed

经过整整两天的“研究”(阅读:将我的头撞在我的键盘上)并诅咒 TeamCity/MSDN/Tomcat 文档以及幻影 IIS 绑定,我想出了一个非常令人困惑的问题的答案:如何才能我在运行 Windows Server 2008 和 IIS 7 的多宿主服务器上更改了 TeamCity 的 IP 地址和端口号,这有必要吗?.

首先,介绍一下背景。我们的构建服务器运行 Windows Server 2008,在一个 NIC 上有两个 IP 地址(192.168.1.30 和 192.168.1.31)。我已将 IIS 配置为将其唯一的站点显式绑定到端口 80 上的 192.168.1.30。此时,我认为 192.168.1.31 是完全开放的,可以用于 TeamCity 了……不完全是。

第一个烦恼:在安装 TeamCity 时,它完全无视有多个 IP 地址与此服务器关联的事实,仅询问它应该绑定到哪个端口。对于服务器级软件,这非常令人惊讶。

第二个烦恼:TeamCity 默认使用端口 8080(什么??)。由于第一个烦恼,端口选择有点模棱两可:TeamCity 是否要绑定到两个 IP 地址上的端口 8080?将端口选择更改为 80 会产生一个警告,即另一个服务已经绑定到端口 80。嗯,IIS 应该只绑定到 192.168.1.30 上的端口 80;192.168.1.31 不应绑定任何内容。显然 TeamCity 在 192.168.1.30 上与 IIS 竞争。

完成 TeamCity 的安装,选择 80 端口并忽略绑定警告后,我打开“C:\TeamCity\server.xml”。旁注:“C:\TeamCity\”是 TeamCity 的默认安装目录,而“C:\Users\.BuildServer”是默认数据目录。无论如何,“server.xml”是配置文件,您可以在其中设置 TeamCity 网络界面的端口和 IP 地址等内容。经过一番研究,我想出了在端口 80 上绑定 IP 地址 192.168.1.31 的配置:

寻找任何一个

<Connector
    port="8080"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />
Run Code Online (Sandbox Code Playgroud)

或者

<Connector
    port="80"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />
Run Code Online (Sandbox Code Playgroud)

取决于您在安装过程中选择的端口。更改为(注意:更改IP地址!

<Connector
    port="80"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    address="192.168.1.31" />
Run Code Online (Sandbox Code Playgroud)

应该就这么简单吧……对吧?好吧,重新启动 TeamCity 的 Web 服务器(通过 Windows 的服务管理器)在 192.168.1.31 上没有任何结果。啊。

事实证明,即使 IIS 的唯一站点已明确绑定到端口 80 上的 192.168.1.30,IIS 仍会侦听所有IP 地址。当然,这会导致 TeamCity 的 Web 服务器 (Tomcat) 在上线前就停止运行。从命令行手动启动 Tomcat 以剖析其标准输出错误并进行更多研究后,我偶然发现了 StackOverflow 的这个小宝石:如何控制 IIS7 使用的 IP 地址?

因此,从我运行的管理命令行(注意:再次更改 IP 地址!这次是您希望IIS 绑定的 IP 地址

netsh http 添加 iplisten ipaddress=192.168.1.30

现在我重新启动 TeamCity 的 Web 服务器,瞧,它起作用了!!我可以浏览到 192.168.1.31而无需指定端口号,TeamCity 的 Web 界面就会出现。快速的完整性检查显示 IIS 仍然正确绑定到 192.168.1.30。一切都很好。

对于这么简单的修复,很抱歉发表这么长的帖子。我希望这可以帮助其他人,因为它肯定会为我节省数小时的烦恼。


编辑:使用 TeamCity 一段时间后,我注意到与 TeamCity 一起安装的构建代理没有被正确识别。为了解决这个问题,我必须将构建代理指向 TeamCity 的新 URL。此配置更改在“C:\TeamCity\buildAgent\conf\buildAgent.properties”中完成。同样,这是 TeamCity 的默认安装路径,可能会有所不同,具体取决于您自定义 TeamCity 安装的方式。

在“buildAgent.properties”中,确保“serverUrl”指向新的 TeamCity URL。就我而言,我将其更新为:

serverUrl=http\://192.168.1.31

进行此更改后,重新启动 TeamCity Web Server 和 TeamCity Build Agent。

Bra*_* B. 10

答案是上面原始“问题”的一部分。

  • +1 为我节省了几个小时! (2认同)