【问题标题】:How to have different Web.config files for different slots in Azure如何为 Azure 中的不同插槽提供不同的 Web.config 文件
【发布时间】:2018-08-08 13:50:01
【问题描述】:

如何为不同的 Azure 插槽设置不同的 Web.config 文件。

我在同一个网站上有一个登台和生产槽我不希望登台槽公开(它仅用于测试等),所以我通过 web.config 文件为该槽设置了身份验证。

问题是,当我上传更改时,生产槽获取与暂存槽相同的 web.config 文件,该文件设置为仅允许通过身份验证访问,而且参数不同,因此生产槽最终无法访问,我必须在生产槽中手动更改 web.config 文件才能使其工作。

我想用某种方法为生产槽定义不同的 web.config 文件。



更新(向问题添加更多信息):

我正在使用本地机器进行测试(使用本地服务器),即开发环境。
这些网站在 wordpress 中(wordpress 使用 php)。

暂存槽仅供少数人使用,未连接到我的本地局域网,当我有选择地希望他们在将东西发送到生产之前测试我的网站(不同的操作系统、不同的平台、不同的手机......) .当我不使用暂存槽时,我可以停止它,这样生产资源不会受到影响。
我已经将 AppSettings 用于不同的连接字符串和参数。我不知道如何使用它来定义不同的身份验证设置..?我在 web.config 文件中有身份验证设置(由暂存槽使用)。

我的 web.config 文件:

<configuration>
  <system.web>
    <authorization>
      <allow users="foo@gmail.com, foo2@foo2.com, foo3@gmail.com"/>
      <deny users="*"/>
    </authorization>
  </system.web>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="WordPress: http://contoso.azurewebsites.net" patternSyntax="Wildcard">
          <match url="*"/>
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
          </conditions>
          <action type="Rewrite" url="index.php"/>
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
  <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>

【问题讨论】:

    标签: azure


    【解决方案1】:

    您错误地使用了插槽。暂存槽并不意味着是用于测试的长期应用程序。这些用于在部署时对应用程序进行部署和短期自动化测试。

    此外,如果您的 prod 和 staging 插槽几乎相同,那么如果它与生产执行相同的操作,那么保护 staging 的意义何在?

    总结一下——没有办法做你想做的事。因此,您不妨设置单独的测试 WebApp 并通过 web.config 对其进行保护。

    【讨论】:

      【解决方案2】:

      有几种方法可以完成您正在尝试做的事情。虽然我同意 Trailmax - 这似乎是对插槽预期目的的滥用。请记住,插槽与您的生产插槽共享资源(CPU、内存等)。如果您在集成和测试环境中使用插槽并且出现了一些问题,那么您正在影响您的生产资源。这真的不是一个好主意。

      但如果你还是想走这条路,你可以:

      1. 使用插槽以及不同的构建配置和关联的 web.config 转换。例如,如果您的生产站点是 foo.azurewebsites.net,您可以定义一个名为“staging”的暂存槽。您可以在 foo-staging.azurewebsites.net 上直接发布到该插槽。定义一个名为 Staging 的单独构建配置,并创建一个 web.staging.config 转换,将基础 web.config 更新为您要部署到暂存槽的值。确保在发布时选择 foo-staging 目标,并选择“staging”作为构建配置。

      2. 如果环境因 AppSettings 和 ConnectionStrings 不同,请在 Web 应用程序的应用程序设置部分定义特定于插槽的值。这些会覆盖 web.config 中的任何内容。这是我个人最喜欢的方法。

      【讨论】:

      • +1 表示选项 2。查看这篇文章:blogs.msdn.microsoft.com/benjaminperkins/2017/09/04/…
      • 我用我的本地机器进行测试,也就是开发环境。暂存槽仅由少数人使用,当我有选择地希望他们在将内容发送到生产之前测试我的站点(不同的操作系统、不同的平台、不同的手机......)时。我可以停止暂存槽,当我不使用它时,生产资源不会受到影响吗?我已经将 AppSettings 用于不同的连接字符串和参数。我不知道如何使用它来定义不同的身份验证设置..?我在 web.config 文件中有 auth 设置。
      • @Pedro,在 Azure 门户中,转到您的 Web 应用并选择应用程序设置菜单项。您可以在 web.config 的 部分中添加设置。这些将覆盖您的 web.config 中的内容。如果您选中设置旁边的“插槽设置”复选框,则在您进行插槽交换时不会交换它。
      • @RobReagan 我已经用更多信息更新了这个问题。如何在 Azure 的应用程序设置中更改 web.config 中定义的身份验证设置?我已经搜索过,但没有找到一种方法来做到这一点..
      • @Pedro,除了 之外,您不能覆盖 Web 应用程序的应用程序设置部分中的任何内容。如果你不想处理 web.config 转换,你可以用肮脏的方式改变这些值。登录到插槽的 SCM 站点(将是 [yourAzureWebAppName]-[SlotName].scm.azurewebsites.net。使用与 Azure 门户相同的凭据。然后您可以浏览到插槽的特定 web.config 文件并进行更改到您需要的任何东西。这样做会触发您的插槽重新启动。
      猜你喜欢
      • 2015-06-14
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      相关资源
      最近更新 更多