代理 - 带有或不带有 MVC 的 ASP.NET
我正在开发一个多租户应用程序,其中每个租户都可以访问 1 个或多个“子应用程序”(不同的 ASP.NET MVC 网站)。
稍后,我将为每个子应用程序提供新版本,并以:
- http://v1.app1.domain.com
- http://v2 .app1.domain.com
- http://v3.app1.domain.com
- http://v1.app2.domain.com
- http://v2.app2.domain.com
- http:// /v1.app3.domain.com
有些租户希望访问最新版本,有些租户仍会使用旧版本。 这就是我所做的。
现在我想为他们隐藏“子域版本”。他们只会访问域:app1.domain.com 这个“内部智能代理”将有核心来知道该租户可以访问哪个版本。
有人知道我该怎么做吗?我的所有内部 url(链接、图像、JS、CSS 等)、AJAX 等都能正常工作吗? 或者向我指出一些可以帮助我的教程/博客/论坛?
非常感谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您尝试构建的本质上是一个 HTTP 代理。与大多数其他代理的区别在于实际的 URL 是在服务器端构建的。
有很多不同的方法可以做到这一点。我会选择以下选项之一:
无论哪种方式,您都必须
What you are trying to build is in essence an HTTP proxy. The difference to most other proxies is just that the actual URL is built on the server side.
There many different ways to do this. I'd choose one of the following:
Either way, you will have to
应用程序请求路由 (ARR) 可能是一个可行的解决方案,如果您使用 IIS 7 或 7.5。
您将在 IIS 中定义一个额外的网站作为代理,该网站将独立于您的应用程序使用的网站。
有关哪个租户使用哪个版本的规则必须写入 web.config 以便 ARR 读取。这是可以接受的吗?如果您有少量不经常更改的租户,您可能会乐意手动编辑此文件。如果您需要更多自动化,您可以以编程方式生成此 web.config 文件。由于此 web.config 仅适用于您的 ARR 代理站点,因此编辑它不会导致您的应用程序站点重新启动。
示例配置可能使用以下 IIS 站点:
IIS 服务器级别设置:ARR 缓存 ->服务器代理设置->启用代理。 (如果您的应用程序需要长时间超时,请在此处设置超时。)
在“代理”站点的 web.config 中,重写以下规则:
当请求传入时,它将访问您的代理站点,然后这些规则将查看主机名并重定向到适当的内部站点。
如果您的 ARR 站点与内容站点在同一台服务器上运行,您可能需要
从 C:\windows\system32\inetsrv\config\applicationHost.config 中删除该行,并将其添加为代理站点 Web 中的模块。配置。这将仅将 ARR 应用于您的代理站点,而不是整个服务器。
Application Request Routing (ARR) could be a workable solution if you are using IIS 7 or 7.5.
You would have an additional web site defined in IIS acting as the proxy, which would be separate to the web site(s) your application uses.
The rules about which tenant is on which version would have to be written to a web.config for ARR to read. Is this acceptable? If you have a small number of tenants changing infrequently, you may be happy to edit this file by hand. If you need more automation, you could programatically generate this web.config file. Because this web.config is only for your ARR proxy site, editing it will not cause your application sites to restart.
A sample configuration might use the following IIS Sites:
IIS server-level settings: ARR cache -> Server Proxy Settings -> enable proxy. (Set the timeout here if your app needs long timeouts.)
And in your "proxy" site's web.config, the following rewrite rules:
When a request comes in, it will hit your proxy site, then those rules will look at the hostname and redirect to the appropriate internal site.
If your ARR site is running on the same server as your content sites, you may want to remove the line
from C:\windows\system32\inetsrv\config\applicationHost.config, and add it as a module in your proxy site's web.config. This will apply ARR only to your proxy site, instead of the whole server.