IIS7 – Web部署工具 – SetParam / SetParamFile设置http和https绑定证书

我们目前正在使用 MS Web Deployment Tool一个实时网站和一些Web服务从一个分段框同步到两个实时服务器.

登台框在端口17000上的任何IP上托管站点,而两个活动服务器是负载平衡的,并且每个服务器具有不同的IP.

目前,我生成两个单独的软件包用于部署 – 每台机器一个 – 使用同步操作并指定DestinationBinding参数,如下所示:

msdeploy -verb:sync 
  -source:WebServer,computerName=localhost
  -dest:package="machinename.zip"
  -setParam:type="DestinationBinding",scope="SiteName",value="ip_address:port:".

(分成多行以便于阅读!)

我运行了两次,为两台机器中的每台机器提供了不同的目标文件名和IP地址.在部署方面,我只是从每个包到其各自的实时站点进行同步.

我知道,我知道 – 我应该能够通过生成一个参数化包然后使用两个服务器中的每个服务器的SetParamFile开关来实现它 – 相信我想,但是这样做的文档坦率地说是非存在.

现在我需要为此站点配置和部署HTTP和HTTPS绑定;还包括要使用的ssl证书.

我在登台框上添加一个SSL绑定 – 它使用了开发证书(需要更换 – 或者登台框是否应该使用实时证书?),现在上面的命令行有效果替换http和https条目上的目标IP.

看来我无法在上面的-setParam中的DestinationBinding值中指定多个绑定和证书信息,所以任何人都知道我该怎么做呢?

任何帮助非常感谢.

解决方法

好吧,所以我做到了这一点 – 我不是把它作为一个问题的编辑,尽管这似乎是在正确的轨道,但可能有一个比我一直在做的更好的方式.图我要让民主决定!

使用this链接,我能够找出应该与msdeploy的setParamFile开关一起使用的XML文件的格式.在过去,我还会在安装Web部署工具后使用IIS中的嵌入式GUI找出declareParamFile XML的格式.

因此,给定一个名为“SiteA”的站点,在applicationHost.config文件中有两个绑定条目,如下所示:

<bindings>
  <binding protocol="http" bindinginformation="*:80:" />
  <binding protocol="https" bindinginformation="*:443:" />
</bindings>

(具体而言 – 端口80上的任何IP地址和端口443上的任何IP地址)

使用的实际证书不存储在applicationHost.Config中,而是存储在Http.sys的配置中(根据this article).当msdeploy为网站准备一个包时,它会嵌入那些信息 – 这可能不是我最后提到的祝福.

第一步是声明一个参数xml文件,我们将使用它来为目标实时服务器参数化一个包:

<parameters>
  <!-- declare parameter for Http Binding -->
  <parameter name="SiteA-http" description="SiteA Http Binding">
    <parameterEntry kind="DestinationBinding" scope="SiteA" match=":80:" />
  </parameter>
  <!-- declare parameter for Https Binding -->
  <parameter name="SiteA-https" description="SiteA Https Binding">
    <parameterEntry kind="DestinationBinding" scope="SiteA" match=":443:" />
  </parameter>
</parameters>

请注意两个内部参数条目上的’match =’属性值.这可确保更换正确的绑定.这是一个正则表达式(如this technet article中所述),它选择将使用将在瞬间传递的参数值更改的现有绑定值.

我们将其保存为declareparameters.xml.

有了这个,我们现在可以从我们的分段框生成一个参数化包,然后我们可以使用此命令行部署它(这是’映像’我们的SiteA所在的整个IIS):

msdeploy -verb:sync 
  -source:WebServer,computerName=localhost
  -dest:package="parameterised.zip"
  -declareParamFile:declareparameters.xml

如果网站位于其他Web服务器上,请将“localhost”替换为该Web服务器的名称.必须在目标计算机上运行Web Deploy Agent服务才能使其正常工作.

现在,我们声明一个参数xml文件,该文件实际上将部署的参数值提供给实时服务器:

<parameters>
  <setParameter name="SiteA-http" value="[fixedIPAddress]:80:"/>
  <setParameter name="SiteA-https" value="[fixedIPAddress]:443:"/>
</parameters>

我们将其保存为

[targetServerName]parameters.xml

(在我的例子中,我有两个目标服务器,因此每个服务器都有自己的参数xml,文件名不同,每个文件名略有不同).

最后,我们可以使用以下命令行对目标服务器执行参数化部署:

msdeploy -verb:sync 
  -source:package="parameterised.zip"
  -dest:WebServer,computerName="[targetServerName]"
  -setParamFile=[targetServerName]parameters.xml

因此,现在我们可以更改Http或Https Binding的IP,如果原始文件完全不同,我们可以参数化该站点可能需要的任意数量的单个绑定.

到目前为止,这有一个缺点 – 所以任何备选答案都应该赞赏 – SSL配置从源计算机复制到包中 – 这意味着为了使实时站点上的SSL配置在部署时正确,包括暂存机和实时服务器必须使用完全相同的SSL证书.

如果登台框可以使用自签名或内部证书进行健全性检查,然后在实际部署中应用真正的SSL证书 – 再次,从XML文件进行参数化,那将是多么美妙的事情.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 &lt;div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些