如何为Azure中的不同插槽创建不同的Web.config文件

时间:2018-02-28 15:59:23

标签: azure

如何为不同的Azure插槽提供不同的Web.config文件。

我有一个暂存和制作插槽,网站我不希望公共广告位是公开的(它只用于测试等),所以我为此设置了身份验证插入web.config文件。

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

我想有一些方法为生产槽定义一个不同的web.config文件。



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

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

只有少数人使用暂存插槽,而不是连接到我的本地局域网,当我有选择地让他们测试我的网站(不同的操作系统,不同的平台,不同的手机......)之前。当我不使用它时,我可以停止暂存槽,这样就不会影响生产资源 我已经将AppSettings用于不同的connectionStrings和参数。我不知道如何使用它来定义不同的身份验证设置..?我在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>

2 个答案:

答案 0 :(得分:1)

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

此外,如果您的产品和分段槽几乎完全相同,那么如果它与生产相同,那么保护分期的重点是什么?

总而言之 - 没有办法做你想做的事。因此,您可以设置单独的WebApp测试并通过web.config保护它。

答案 1 :(得分:0)

有几种方法可以完成你想要做的事情。虽然我同意Trailmax - 这似乎是对插槽的预期用途的误用。请记住,插槽与生产槽共享资源(CPU,内存等)。如果您正在为集成和测试环境使用插槽而某些方面有些问题,则会影响您的生产资源。这真的不是一个好主意。

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

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

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