【发布时间】:2014-08-18 11:47:22
【问题描述】:
我在 Windows 2008R2、IIS 7 环境中部署了 .Net 应用程序(使用 Outsystems 平台构建)。此应用程序已经可以正常运行。它通过端口 443 上的 HTTPS 服务请求,我可以毫无问题地访问它。
现在,需要允许一些用户通过 NAT 访问它,该 NAT 配置为在端口 8200 上处理请求。请求被转发到服务器没有问题,除非响应是重定向(HTTP 302)。在这些情况下,响应的 Location Header 设置为应用程序实际服务的端口,即端口 443。当客户端的浏览器尝试访问在 Location Header 中设置的 URL 时,它将失败,因为 NAT只为 8200 端口的请求提供服务。
总之:
- 客户端浏览器访问
https://myserver:8200/myapp; - NAT 转换 URL 并转发到
https://myserver:443/myapp; - 应用程序回复 302 重定向到
https://myserver:443/redirect; - 客户端浏览器访问
https://myserver:443/redirect; - NAT 阻止此访问,因为它需要端口 8200;
这是我尝试做的;我在 IIS 中安装了 URL Rewrite 模块并创建了以下规则:
- 将请求的主机标头(在这些情况下为
https://myserver:8200)存储到服务器变量 ORIGINAL_HOST 的入站规则。 - 一个出站规则,用于将在响应的位置标头 (
https://myserver:443/redirect) 中发送的 URL 的主机部分替换为存储在我的服务器变量 ORIGINAL_HOST 中的值。该规则仅适用于重定向的情况。
我现在面临的问题是,在我启用此规则的那一刻,所有 AJAX 请求都会停止工作,即使该规则不适用于它们,即使不通过 NAT 访问应用程序也是如此。 发生这种情况时,我通过开发人员工具中的 IE 网络选项卡看到请求标头和正文是好的,响应标头是好的,但响应正文是空的,不应该是。此外,如果我尝试使用断点在服务器上调试 AJAX 请求,它不会在断点处停止。
那么,我的问题是:使用 URL 重写是解决 NAT/URL 问题的最佳方法吗?如果是这样,我该如何解决 AJAX 问题?如果不是,那我该如何解决重定向问题?
*edit:这是我的规则配置:
- Inbound rule to store the host value
- Outbound rule to replace the host
- Outbound precondition to handle only redirects
在此先感谢您,
若昂·戈麦斯
【问题讨论】:
-
你能告诉我们你的配置吗?
-
嗨 NicoD。我已将我的配置添加到帖子中。
-
你有没有找到一个好的解决方案?看起来应该很容易……杀了我!
标签: .net iis-7 nat url-rewrite-module outsystems