IIS 有多个网站:
- 域名1.com
- a.domain2.com
- b.domain2.com
还有一个 TomCat 在运行
localhost:8087
挑战在于如何将 TomCat 公开为
b.domain2.com
我做了什么:
- 在 IIS 中的 ARR 中启用代理
在 b.domain2.com 上添加了反向代理 URL 重写规则
<rewrite> <rules> <rule name="ReverseProxyInboundRule1" stopProcessing="true"> <match url="(.*)" /> <action type="Rewrite" url="http://localhost:8087/{R:1}" /> </rule> </rules> <outboundRules> <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1" > <match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:8087/(.*)" /> <action type="Rewrite" value="http{R:1}://femiscan.a2itsolutionsllc.com/{R:2}" /> </rule> <preConditions> <preCondition name="ResponseIsHtml1"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" /> </preCondition> </preConditions> </outboundRules> </rewrite>
我所看到的:
本地 如果我导航到
http://b.domain2.com
我的浏览器显示 TomCat 网站为
http://localhost:8087
(为什么?)
外部如果我在 Chrome 中导航到
http://b.domain2.com
它试图通过隧道到达
http://localhost:8087
如果我在 IE 中导航,它会返回 500 错误(Fiddler:HTTP/1.1 500 URL 重写模块错误。)
问题:我做错了什么?可以解决吗?如何解决?
答案1
您的操作设置为“重写”,因此它正在重写 URL。
在 IIS 管理器中:
- 右键单击“服务器场”,单击“创建服务器场”。为其命名。
- 在“服务器名称或地址”字段中输入 Tomcat 实例的完全限定域名
- 点击“高级设置...”,展开“applicationRequestRouting”,将httpPort更改为
8087
- 当提示创建重写规则时单击“是”
- 单击窗口左侧窗格中“服务器场”下新创建的场
- 在服务器场功能查看页面打开“路由规则”
- 单击右侧窗格上的“URL 重写...”链接
- 删除旧的 Tomcat 重写规则
- 单击右侧窗格顶部的“添加规则...”,选择“空白规则”
- 命名
- 在“匹配 URL”窗格中:
- 请求的 URL:
Matches the Pattern
- 使用:
Regular Expressions
- 图案:
*
- 请求的 URL:
- 展开条件窗格,单击“添加”
- 条件输入:
{HTTP_HOST}
- 检查输入字符串是否:
Matches the pattern
- 图案:
b.domain2.com
- 查看
Ignore Case
- 条件输入:
- 在操作窗格中:
- 动作类型:
Route to Server Farm
- 方案:
http://
- 服务器场:
(the name of your server farm)
- 小路:
{R:1}
(笔记:这可能需要一些调整,但从你的例子来看它应该可以工作)
- 动作类型:
- 单击右侧窗格中的“应用”,您的