如何在Windows 2008上的不同平台上运行的应用程序共享端口80

时间:2015-11-15 13:57:30

标签: http tomcat iis portforwarding netsh

我有一个Apache Tomcat,它运行在Windows Server 2008 R2 Standard上并托管一个网站(www.domain1.com)。 Apache目前正在服务器上侦听端口80。现在,在同一台服务器上,我想托管一个用.NET编写的Http服务器应用程序(www.domain2.com),它将作为Windows服务运行。我还希望Http服务器通过端口80访问www.domain2.com。

所以我只需要。

    Request                                   Forward To
1.  http://www.domain1.com/[anything]         http://localhost:8080/app1/[anything] <-- tomcat
2.  http://www.domain2.com/[anything]         http://localhost:8000/[anything] <-- windows service

我尝试使用下面的netsh配置,但它没有帮助。

netsh interface portproxy add v4tov4 listenport=80 listenaddress=www.domain1.com connectport=8080 connectaddress=127.0.0.1 protocol=tcp
netsh interface portproxy add v4tov4 listenport=80 listenaddress=www.domain2.com connectport=8000 connectaddress=127.0.0.1 protocol=tcp

当我从本地计算机检查telnet localhost 80或从远程计算机检查telnet www.domain1.com 80时,它未连接。

我对任何涉及netsh,IIS,Tomcat或任何其他第三方工具的端口转发解决方案持开放态度,以实现我的目标。

根据Carlos的建议,下面的配置工作

  1. 在IIS上安装UrlRewrite
  2. 在IIS上安装ARR
  3. IIS主页 - &gt; IIS - &gt;应用程序请求路由缓存 - &gt;服务器代理设置 - &gt;选中启用代理
  4. 创建默认网站侦听端口80,不绑定主机名
  5. 将以下内容添加到默认网站的web.config
  6. -

    <system.webServer>
    <rewrite>
    <rules>
        <rule name="forward domain1 to tomcat">  
            <match url="(.*)" />  
            <conditions>
                <add input="{HTTP_HOST}" pattern="domain1.com" />
            </conditions>
            <action type="Rewrite" url="http://localhost:8080/app1/{R:1}" />  
        </rule>
        <rule name="forward domain2 to windows service">  
            <match url="(.*)" />  
            <conditions>
                <add input="{HTTP_HOST}" pattern="domain2.com" />
            </conditions>
            <action type="Rewrite" url="http://localhost:8000/{R:1}" />  
        </rule> 
    </rules>
    </rewrite>
    </system.webServer>
    

1 个答案:

答案 0 :(得分:2)

一些建议:

  1. 在端口80中配置IIS以使用端口80的主机名。默认网站安装为端口80设置绑定,没有任何主机名,这意味着它将设置和http.sys注册以监听所有。如果您只是在那里设置主机名,那么它将允许您在其他程序中使用它,如.net。
  2. 在您的.net应用程序中(假设您使用的是构建在http.sys之上的HttpListener),那么您可以确保使用带有主机名的绑定(前缀)(如果使用的话,它甚至可以是localhost需要),这将使其工作,并通过http.sys在端口80中收听。
  3. 最后,对于非http.sys-nice-players和其他http服务器等,您可以安装应用程序请求路由(http://www.iis.net/downloads/microsoft/application-request-routing),它将允许您配置规则以将流量代理到其他端口或(甚至其他机器,如果需要)。所以你可以在ARR中添加规则来进行映射和路由。