【问题标题】:Azure Web Apps Reverse Proxy based on HostnameAzure Web Apps 基于主机名的反向代理
【发布时间】:2016-01-28 02:56:42
【问题描述】:

我有一个运行基于 Hapi.js 的 Node 应用程序的 Azure Web 应用程序(以前称为 Azure 网站)。 Hapi 在三个不同的端口上运行三个不同的应用程序。在本地,我正在运行 nginx,并且有 3 个不同的域,每个域都使用 proxy_pass 指向不同的端口:

api.business.mywebsite.com --> localhost:3001
api.customer.mywebsite.com --> localhost:3002
api.admin.mywebsite.com --> localhost:3003

理想情况下,我希望在我的 Azure Web 应用程序上进行类似的设置,其中 Hapi 服务器在端口 3001-3003 上运行,并基于指向 mywebsite.azurewebsites.net 的传入主机名(例如:api.business.mywebsite.com) ,将代理到该特定应用程序正在运行的端口。我已经阅读了this article 以及其他一些内容,但我仍然不太确定 a) 是否可能以及 b) 如何配置它。

提前致谢!

【问题讨论】:

  • 重读您的问题,您为什么要设置这样的反向代理?为什么不让这些域直接指向您想要的目的地呢?我没有看到您通过使用反向代理获得了什么
  • 我不确定我将如何做到这一点。这是一个在三个不同端口上服务的单节点应用程序。本质上,应用程序为每个端口安装一组特定的路由。这并不是说我想完全重定向到不同的站点,我只是希望能够根据请求的来源在内部指向一个特定的端口。例如,我将api.business.mywebsite.com 指向mywebsite.azurewebsites.net,它会查看请求来源并查看api.business.mywebsite.com,然后将该请求转发到端口3001 上的应用程序。
  • 为什么要将请求路由到不同的端口?这给了你什么?
  • 正如我上面提到的,我有一个在三个不同端口上提供受限访问 API 的应用程序,但具有共享代码库。如果在 Azure Web 应用程序中无法做到这一点,那很好——我可以改变我的方法,但只是寻找一个明确的答案。感谢您的帮助:)
  • 不,不可能在 Azure Web 应用上打开不同的端口。对于您想要的用途,我怀疑您可以使用比打开端口重定向流量更好的选择

标签: azure iis proxy azure-web-app-service


【解决方案1】:

以下是有关如何创建反向代理的说明:http://ruslany.net/2014/05/using-azure-web-site-as-a-reverse-proxy/

这些是关键步骤:

1。在您的网站上启用反向代理

在您的站点文件夹中创建一个 applicationHost.xdt 文件,其中包含以下内容:

<?xml version="1.0"?>  
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">  
  <system.webServer>  
    <proxy xdt:Transform="InsertIfMissing" enabled="true" preserveHostHeader="false" reverseRewriteHostInResponseHeaders="false" />  
  </system.webServer>  
</configuration>

2。将重写规则添加到 web.config 文件中:

示例规则:

<configuration>  
  <system.webServer>  
    <rewrite>  
      <rules>  
        <rule name="Proxy" stopProcessing="true">  
          <match url="^proxyUrl/?(.*)" />  
          <action type="Rewrite" url="http://www.iis.net/{R:1}" />  
        </rule>  
      </rules>  
    </rewrite>  
  </system.webServer>  
</configuration> 

要使反向代理基于主机名,只需设置适当的匹配url

【讨论】:

  • 谢谢你,赞恩。对于 url,我会使用类似“localhost:3001”还是完整的 Azure 网站域(例如:mywebsite.azurewebsites.net:3001/{R:1})?
  • 您无法在 Azure Web 应用上打开特定端口(如端口 3001)。我原以为您会将请求重定向到其他站点。
猜你喜欢
  • 1970-01-01
  • 2013-01-24
  • 2015-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 2019-06-20
相关资源
最近更新 更多