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

Http 如何在Windows 2008上为运行在不同平台上的应用程序共享端口80,http,tomcat,iis,portforwarding,netsh,Http,Tomcat,Iis,Portforwarding,Netsh,我有一个ApacheTomcat,它运行在Windows Server 2008 R2标准上,并托管一个网站(www.domain1.com)。Apache当前正在侦听服务器上的端口80。现在,在同一台服务器上,我想托管一个用.NET(www.domain2.com)编写的Http服务器应用程序,该应用程序将作为Windows服务运行。我还希望Http服务器可以通过端口80访问www.domain2.com 所以我需要的就是 Request

我有一个ApacheTomcat,它运行在Windows Server 2008 R2标准上,并托管一个网站(www.domain1.com)。Apache当前正在侦听服务器上的端口80。现在,在同一台服务器上,我想托管一个用.NET(www.domain2.com)编写的Http服务器应用程序,该应用程序将作为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
当我从本地机器或从远程机器检查
telnet www.domain1.com 80
时,它没有连接

我欢迎任何涉及netsh、IIS、Tomcat或任何其他第三方工具的端口转发解决方案来实现我的目标

解决方案 按照卡洛斯的建议,以下配置有效

  • 在IIS上安装URL重写
  • 在IIS上安装ARR
  • IIS主页->IIS->应用程序请求路由缓存->服务器代理设置->选中启用代理
  • 创建没有主机名绑定的默认网站侦听端口80
  • 将以下内容添加到默认网站的web.config
  • -


    有几点建议:

  • 将端口80中的IIS配置为使用端口80的主机名。默认网站安装为端口80设置了一个绑定,没有任何主机名,这意味着它将设置和http.sys注册以侦听所有主机名。如果您只是在那里设置一个主机名,那么它将允许您在其他程序(如.net)中使用该主机名
  • 在.net应用程序中(假设您使用的是构建在http.sys之上的HttpListener),那么您可以确保使用带有主机名的绑定(前缀)(如果需要,它甚至可以是localhost),这将使它能够工作,并且对通过http.sys在端口80中侦听的其他人很好
  • 最后,对于非http.sys-nice-players(如其他http服务器等),您可以安装应用程序请求路由(),该路由允许您配置规则以代理到其他端口或(甚至其他机器,如果需要)的流量。因此,您可以在ARR中添加规则来进行映射和路由
  • 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
    
    <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>