【问题标题】:Reverse proxy in Azure with Web AppsAzure 中的反向代理与 Web 应用程序
【发布时间】:2017-11-22 05:14:18
【问题描述】:

我正在从 Linux 上的 Apache 迁移到 Azure Web Apps,并且我有一个配置有反向代理的特定 URL(mysite.com/blog 及其下的所有内容),因此最终用户不知道内容实际上是来自另一个服务。

我确信我可以在 Web 应用程序(在 IIS 上运行)中执行此操作,但我找不到任何有关如何执行此操作的文档。作为备份,我愿意在我的 Web 应用程序前面放置另一个服务。

如何在 Azure 中完成此操作?

更新:我确实尝试过使用另一项服务 - Functions。我的架构是这样的:

这在生产中有效,但我在开发中遇到了障碍。 /blog 可能工作也可能不工作,具体取决于入口点。在 prod 中,我们的 DNS 将被配置为使 mysite.com 指向 mysite-proxy.azurewebsites.net,因此,用户点击的任何 URI 都可以使用。然而,在开发中,我们可能希望从流量管理器中浏览到 /blog,这会将我们路由到 不存在的 web 应用上的 /blog。当然,如果我们在 webapp 上直接去/blog,同样的问题。我试图在图表的右侧展示这些示例。

我想找到一个解决方案,以便 webapp 本身可以处理 /blog 代理,然后我们可以确定与现有解决方案相比,它是否值得在速度和成本上进行权衡。

【问题讨论】:

    标签: azure azure-web-app-service


    【解决方案1】:

    您可能想要查看 Azure Functions 代理:https://docs.microsoft.com/en-us/azure/azure-functions/functions-proxies

    【讨论】:

    • 是的,函数代理在函数应用程序之上受支持,而不是 Web 应用程序。一种选择可能是让所有流量通过具有代理的功能应用程序,并在您的 WebApp 上进行更改,以在请求不是来自代理的情况下重定向到代理。如果传入的标头不存在,您可以在 Proxy 和 WebApp 之间添加共享密钥标头,并在 WebApp 中执行重定向。是的,我知道您需要对您的网络应用程序进行代码更改才能使其正常工作。
    • 基本上,您应该使用 EasyAuth、共享标头来保护您的 WebApp 后端……因此对 WebApp 的请求仅来自代理。
    • 另外,如果您的场景不太复杂,您可能需要检查 IIS UrlRewrite:blogs.msdn.microsoft.com/friis/2016/08/25/…
    • @Henry 这是在 IIS 中进行反向代理的更好资源:blogs.msdn.microsoft.com/zhiliang_xus_blog/2016/01/19/…
    【解决方案2】:

    听起来您想要一个应用程序网关(注意,费用约为 15 美元/天)

    AGW 可以针对多个主机名拥有多个侦听器,包括基于路径的路由。

    您需要添加两个后端,一个用于 /blog 端点,一个用于非 /blog 的东西。后端只需获取目标资源的 IP 或 FQDN,在这种情况下,您将拥有:

    • blogBackend: myblog.com
    • 默认后端:myWebapp.azurewebsites.net

    然后您需要为面向公众的域添加侦听器,就像:

    • myHttpListener:端口 80,主机名=mywebsite.net
    • myHttpsListener:端口 443,主机名=mywebsite.net

    那么你需要一个 HTTP 设置

    • myHttpSetting:协议=HTTPS,端口=443,useWellKnownCACert=Yes,HostnameOverride=Yes,从后端目标选择

    然后你需要规则,一个用于 http=>https 重定向,另一个用于处理路径

    • myRedirectRule: type=basic, listener=myHttpListener, backendtargettype=redirection, targettype=listener, target=myHttpsListener
    • myRoutingRule: type=path-based, listener=myHttpsListener, targettype=backendpool, target=defaultBackend, httpSetting=myHttpSetting, pathRules=
      • path=/* name=root backendpool=defaultBackend
      • path=/blog name=blog backendpool=blogBackend

    您可以创建额外的 http 设置并将它们分配给路径规则以更改反向代理的行为。例如,您可以将用户的 URL 设为 https://mywebsite.net/blog,但在请求博客时将路径剥离,因此请求看起来像 myblog.com 而不是 myblog.com/blog

    有很多微小的部分,但应用程序网关可以大规模处理多个应用程序。最重要的是要注意成本,因为这更像是一种企业解决方案。

    【讨论】:

      猜你喜欢
      • 2021-07-14
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 2018-07-03
      相关资源
      最近更新 更多