我在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的重写规则中处理,但我不知道该怎么做。
答案 0 :(得分:1)
重写到另一台服务器基本上是代理。我们需要的是一个 IIS中的反向代理设置基本上代理了您的所有请求 从http://example.com到http://example:8050/(or更好 http://localhost:8050)
<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;在应用程序请求路由
中