重写到其他服务器

时间:2017-07-05 01:17:06

标签: apache mod-rewrite iis url-rewriting

我在tomcat的端口8050下托管了应用程序; mydomain:8050。现在,我希望有一个友好的网址,说mydomain.com用于访问mydomain:8050,而客户端看不到网址中的端口号。客户应始终看到mydomain.com应在内部解析为mydomain:8050

我在端口80上运行了IIS服务器。我在其中创建了一个站点,只是为了使用可以解析为mydomain:8050的重写选项。它没有使用我使用的模式

模式: ((?:[^\/\n]|\/\/)+)(.*) 重写网址 {R:1}:8050{R:2}

然后我在端口90上安装了apache http服务器。在IIS站点中使用重定向将URL重定向到mydomain:90$S$Q,然后在Apache中使用重写将内部重定向到mydomain:8050。当我在其中有一个查询字符串(例如mydomain.com/queryString)时,这会有效,但如果我只键入mydomain.com,则无效。我可以看到它重定向到mydomain:90并停在那里而没有执行任何重写规则。这也会将网址更改为mydomain:90,并且对客户端可见。

我的要求是,当用户输入mydomain.com时,它应该在内部解析为mydomain:8050(带有查询字符串,如果有的话),而无需客户端看到它。我在端口80上运行IIS,在端口90上运行apache。我怎样才能实现这一点?我确信这可以在IIS的重写规则中处理,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

  

重写到另一台服务器基本上是代理。我们需要的是一个   IIS中的反向代理设置基本上代理了您的所有请求   从http://example.comhttp://example:8050/(or更好   http://localhost:8050

  • 确保在IIS上安装了ARR模块
  • 像这样创建反向代理规则
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
   <match url="(.*)" />
   <conditions>
    <add input="{CACHE_URL}" pattern="^(https?)://" />
   </conditions>
   <action type="Rewrite" url="{C:1}://mydomain:8050/{R:1}" />
</rule>

请注意,由于Apcahe和IIS都位于同一服务器中,因此您可以将localhost:8050用作后端代理。

修改

此外,如果您有从后端代理返回的任何重定向,并且您不想重定向位置标头,您可以通过取消选中&#34;在响应标头中反转重写主机来执行此操作&#34;在应用程序请求路由

  • 在IIS管理器中选择服务器节点
  • 转到“应用程序请求路由缓存”
  • 单击“服务器代理设置”
  • UnCheck&#34;在响应标头中反转重写主机&#34;

Reverse rewrite host in response headers