<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Griffey</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/griffey/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/griffey/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:23:05 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>IIS Request Filtering - 如何避免Slow HTTP Attack</title>
      <link>https://docs.microsoft.com/archive/blogs/griffey/iis-request-filtering-slow-http-attack</link>
      <pubDate>Thu, 13 Aug 2015 02:14:56 GMT</pubDate>
      <dc:creator><![CDATA[griffeyying.ms@hotmail.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/griffey/2015/08/13/iis-request-filtering-slow-http-attack/</guid>
      <description><![CDATA[Slow HTTP Attack 是denial-of-service (DoS) 的其中一種攻擊方法，駭客可藉由傳送[大量], [片段], [緩慢] 的HTTP請求來干擾Web...]]></description>
      <content:encoded><![CDATA[<p>Slow HTTP Attack 是denial-of-service (DoS) 的其中一種攻擊方法，駭客可藉由傳送[大量], [片段], [緩慢] 的HTTP請求來干擾Web Server的正常運作，後續將介紹IIS Server上如何使用Request Filtering來進行防護。</p>
<p>&nbsp;</p>
<p>步驟一: <span style="background-color: #ffff99;">設定HTTP Request 屬性</span>: 用來限制HTTP 請求的URL及query string長度。</p>
<p style="padding-left: 30px;">1. 取消勾選 [Allow unlisted verbs]</p>
<p style="padding-left: 30px;">2. Max URL length: 2048</p>
<p style="padding-left: 30px;">3. Max query string: 1024&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/4278.filter1.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/4278.filter1.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/4278.filter1.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/4278.filter1.jpg" alt="" border="0" /></a></p>
<p>圖一, IIS request filtering設定</p>
<p>&nbsp;</p>
<p>步驟二: 設定Header:&nbsp;</p>
<p>在Headers中設定 [Content-type] : 100</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/7080.filter2.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/7080.filter2.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/7080.filter2.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/7080.filter2.jpg" alt="" border="0" /></a></p>
<p>圖二, 設定headers</p>
<p>&nbsp;</p>
<p>步驟三: 設定connectionTimeout, headerWaitTimeout, and minBytesPerSecond等屬性來降低攻擊所帶來的影響。</p>
<pre class="scroll"><code class="cplusplus">&lt;configuration&gt;<br /> &lt;system.applicationHost&gt;<br /> &lt;webLimits <span style="background-color: #ffff99;">connectionTimeout="00:00:30"</span><br /> <span style="background-color: #ffff99;">headerWaitTimeout="00:00:30"</span><br /> <span style="background-color: #ffff99;">minBytesPerSecond="250"</span><br /> /&gt;<br /> &lt;/system.applicationHost&gt;<br /> &lt;/configuration&gt;</code></pre>
<p>&nbsp;</p>
<p>步驟四: 設定完成後，請執行iisreset 讓設定生效。</p>
<p>&nbsp;</p>
<p>Enjoy!</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Azure Network Security Group - 如何使用NSG保護Azure VM (IaaS)</title>
      <link>https://docs.microsoft.com/archive/blogs/griffey/azure-network-security-group-nsgazure-vm-iaas</link>
      <pubDate>Fri, 07 Aug 2015 22:47:47 GMT</pubDate>
      <dc:creator><![CDATA[griffeyying.ms@hotmail.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/griffey/2015/08/07/azure-network-security-group-nsgazure-vm-iaas/</guid>
      <description><![CDATA[所有的Internet網站，常常會遇到惡意攻擊，例如常見的阻斷式攻擊(DoS, DDoS)，因此今天要介紹在Azure IaaS 上可以採取的主動預防做法： 建立Network Security...]]></description>
      <content:encoded><![CDATA[<p>所有的Internet網站，常常會遇到惡意攻擊，例如常見的阻斷式攻擊(DoS, DDoS)，因此今天要介紹在Azure IaaS 上可以採取的主動預防做法： 建立Network Security Group</p>
<p>Azure Network Security Group (以下簡稱NSG) 是用來管理網路進出的Access Control List (ACL)，以下圖為例 - NSG 可以與VM, VNet 建立繫結，可以設定允許/拒絕 inbound/outbound的網路流量。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/4530.nsg1.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/4530.nsg1.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/4530.nsg1.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/4530.nsg1.jpg" alt="" border="0" /></a></p>
<p>圖一, What is NSG</p>
<p>&nbsp;</p>
<p><strong>步驟一: 建立NSG&nbsp;</strong></p>
<p>透過 New-AzureNetworkSecurityGroup 建立一個指定名稱及地區的NSG</p>
<pre class="scroll"><code class="cplusplus">New-AzureNetworkSecurityGroup -Name "<span style="background-color: #ffff99;">IISNSG</span>" -Location <span style="background-color: #ffff99;">East Asia</span> -Label "NSG for IIS"</code></pre>
<p>&nbsp;</p>
<p><strong>步驟二: 將NSG 與VM或VNet 建立繫結</strong></p>
<p>下列範例將以VM與NSG 繫結為例，透過Get-AzureVM 與 Set-AzureNetworkSecurityGroupConfig建立起關聯，執行完成後，你的VM或是VNet 就會受到NSG保護。</p>
<pre class="scroll"><code class="cplusplus">Get-AzureVM -ServiceName "<span style="background-color: #ffff99;">yourCloudServerName</span>" -Name "<span style="background-color: #ffff99;">yourVMName</span>" | Set-AzureNetworkSecurityGroupConfig -NetworkSecurityGroupName "<span style="background-color: #ffff99;">IISNSG</span>" | <span style="background-color: #ffff99;">Update-AzureVM</span></code></pre>
<p>&nbsp;</p>
<p><strong>步驟三: 設定NSG Rule</strong></p>
<p>下列範例將建立 [WEB] 名稱的規則，其優先權為100 (數字越小，優先權越高) 拒絕192.168.1.100這個IP Inbound的所有traffic</p>
<pre class="scroll"><code class="cplusplus">Get-AzureNetworkSecurityGroup -Name "<span style="background-color: #ffff99;">IISNSG</span>" | Set-AzureNetworkSecurityRule -Name <span style="background-color: #ffff99;">WEB</span> -Type <span style="background-color: #ffff99;">Inbound</span> -Priority <span style="background-color: #ffff99;">100</span> -Action <span style="background-color: #ffff99;">Deny</span> -SourceAddressPrefix '<span style="background-color: #ffff99;">192.168.1.100/32</span>' -SourcePortRange '*' -DestinationAddressPrefix '*' -DestinationPortRange '*' -Protocol TCP</code></pre>
<p>&nbsp;</p>
<p><strong>步驟四: 確認NSG Rule</strong></p>
<p>列出所有設定過的規則，可以注意<span style="background-color: #ffff99;">Name, Priority, Action, Source Address Prefix, Port Range</span>等資訊是否正確。</p>
<pre class="scroll"><code class="cplusplus">Get-AzureNetworkSecurityGroup -name <span style="background-color: #ffff99;">iisnsg</span> -Detailed</code></pre>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/6840.nsg2.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/6840.nsg2.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/6840.nsg2.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/6840.nsg2.jpg" alt="" border="0" /></a></p>
<p>圖二, NSG 設定值</p>
<p>&nbsp;</p>
<p>Enjoy!</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>IIS Modules - custom isapi filter 無法正常運作</title>
      <link>https://docs.microsoft.com/archive/blogs/griffey/iis-modules-custom-isapi-filter</link>
      <pubDate>Sun, 19 Jul 2015 03:02:21 GMT</pubDate>
      <dc:creator><![CDATA[griffeyying.ms@hotmail.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/griffey/2015/07/19/iis-modules-custom-isapi-filter/</guid>
      <description><![CDATA[IIS Modules 提供IIS Server擴充功能，無論是傳統C++開發的native module，或是.NET開發的module都可以加入IIS...]]></description>
      <content:encoded><![CDATA[<p>IIS Modules 提供IIS Server擴充功能，無論是傳統C++開發的native module，或是.NET開發的module都可以加入IIS Server，讓IIS功能更強大。</p>
<p>如何管理及安裝IIS modules請參考: <a href="http://www.iis.net/learn/get-started/introduction-to-iis/iis-modules-overview" target="_blank">IIS modules</a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/0118.0719-0.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/0118.0719_2D00_0.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/0118.0719-0.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/0118.0719_2D00_0.jpg" alt="" border="0" /></a></p>
<p>圖一, IIS Modules</p>
<p>&nbsp;</p>
<p>當遇到自行開發的isapi filter module設定完成後，功能不如預期時，可以從兩個方面來進行問題排除：</p>
<p><strong>1. module 是否有正確載入IIS worker process中?</strong></p>
<p>我們可以透過下列的指令，就可以判斷自行開發的dll是否有載入</p>
<p><span style="background-color: #ffff99;">tasklist /fi "imagename eq w3wp.exe" /m</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/5187.0719-3.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/5187.0719_2D00_3.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/5187.0719-3.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/5187.0719_2D00_3.jpg" alt="" border="0" /></a></p>
<p>圖二, tasklist指令列出載入的module</p>
<p>&nbsp;</p>
<p><strong>2. 當確認dll已經載入worker process中，再來就是確認執行順序:</strong></p>
<p>點選[view ordered list]</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/0118.0719-1.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/0118.0719_2D00_1.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/0118.0719-1.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/0118.0719_2D00_1.jpg" alt="" border="0" /></a></p>
<p>圖三, module order list</p>
<p>&nbsp;</p>
<p>確認你的isapi filter dll是否在內建的isapiFilterModule順序之後，因為isapi filter的功能必須在isapiFilterModule 被載入後，客製化的isapi filter功能才能正常運作。</p>
<p>因此，只需要簡單地調整module的順序後，就可以解決此問題。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/8562.0719-2.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/8562.0719_2D00_2.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/8562.0719-2.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/8562.0719_2D00_2.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>圖四, 調整module執行順序</p>
<p>Enjoy!</p>]]></content:encoded>
    </item>
    <item>
      <title>IIS application pool identity - 運用PowerShell自動化修改IIS AppPool identity 及 password</title>
      <link>https://docs.microsoft.com/archive/blogs/griffey/iis-application-pool-identity-powershelliis-apppool-identity-password</link>
      <pubDate>Wed, 15 Jul 2015 00:23:04 GMT</pubDate>
      <dc:creator><![CDATA[griffeyying.ms@hotmail.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/griffey/2015/07/15/iis-application-pool-identity-powershelliis-apppool-identity-password/</guid>
      <description><![CDATA[在IIS Server 的應用程式集區(application pool)...]]></description>
      <content:encoded><![CDATA[<p>在IIS Server 的應用程式集區(application pool) 中，我們常常會使用網域使用者作為應用程式集區的服務帳號。</p>
<p>當網域policy有規定密碼有效日期後，應用程式集區的服務帳號密碼就需要定期進行修改，若忘記修改導致密碼過期，應用程式集區可能會無法啟動(因為預設1740分鐘，應用程式集區會進行回收)，導致佈署在該集區的應用程式會無法執行。</p>
<p>當有數百個服務帳號密碼需要修改時，我們可以使用PowerShell將此作業自動化。</p>
<p></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/4278.0715-3.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/4278.0715_2D00_3.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/4278.0715-3.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/4278.0715_2D00_3.jpg" alt="" border="0" /></a></p>
<p>圖一, IIS&nbsp;應用程式集區</p>
<p>&nbsp;</p>
<p><strong>PowerShell Sample</strong></p>
<p>下列範例分為兩段功能，首先先修改AD的網域使用者密碼，接下來再修改 IIS&nbsp;&nbsp;應用程式集區的識別密碼(identity password)。</p>
<p>而修改 IIS&nbsp;&nbsp;應用程式集區的識別密碼，又再細分為三個步驟: <span style="background-color: #ffff99;">停止集區 -&gt; 修改密碼 -&gt; 啟動集區</span>。</p>
<p>&nbsp;</p>
<pre class="scroll"><code class="csharp"><span style="background-color: #ffff99;">Import-Module ActiveDirectory</span><br /><span style="background-color: #ffff99;">Import-Module WebAdministration</span><br /> <br /># Set the New password<br />$newPWD = ConvertTo-SecureString -AsPlainText $<span style="color: #ff0000;">newPassword</span> -Force<br /> <br /># Reset user password in AD<br />Set-ADAccountPassword -Identity $<span style="color: #ff0000;">samAccountName</span> -NewPassword $newPWD -Reset<br /><br /></code></pre>
<pre class="scroll"><code class="csharp">$userName = "<span style="color: #ff0000;">yourDomainName\$</span></code><span style="color: #ff0000;"><code class="csharp">samAccountName</code></span>"</pre>
<pre class="scroll"><code class="csharp"> <br /># Change AppPool identity password in IIS<br />$targetpool = Get-item "IIS:\AppPools\$<span style="color: #ff0000;">appPoolName</span>" <br /><br /></code></pre>
<pre class="scroll"><code class="csharp">$targetpool.Stop()<br /> <br />$targetpool | Set-ItemProperty -Name "processModel.identitytype" -Value 3<br />$targetpool | Set-ItemProperty -Name "processModel.username" -Value $userName<br />$targetpool | Set-ItemProperty -Name "processModel.password" -Value $newPassword<br /> <br />$targetpool.Start()</code></pre>
<p>&nbsp;</p>
<p>Enjoy!</p>]]></content:encoded>
    </item>
    <item>
      <title>ASP.NET - 使用Powershell 管理VMM cluster, VMM Server 或是 Hyper-V 的VM開關機作業</title>
      <link>https://docs.microsoft.com/archive/blogs/griffey/asp-net-powershell-vmm-cluster-vmm-server-hyper-v-vm</link>
      <pubDate>Tue, 14 Jul 2015 21:09:00 GMT</pubDate>
      <dc:creator><![CDATA[griffeyying.ms@hotmail.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/griffey/2015/07/14/asp-net-powershell-vmm-cluster-vmm-server-hyper-v-vm/</guid>
      <description><![CDATA[管理VM的開關機作業可以經由Powershell 指令進行自動化作業，我要提供的範例是透過ASP.NET 結合 Powershell 來管理VMM, Hyper-V上的 VM...]]></description>
      <content:encoded><![CDATA[<p>管理VM的開關機作業可以經由Powershell 指令進行自動化作業，我要提供的範例是透過ASP.NET 結合 Powershell 來管理VMM, Hyper-V上的 VM 開關機順序。</p>
<p>當需要開關機的VM很多，且有先後順序的需求時(例如: 安裝hotfix)，這個範例就可以派上用場。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/4382.VMM-1.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/4382.VMM_2D00_1.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/4382.VMM-1.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/4382.VMM_2D00_1.jpg" alt="" border="0" /></a></p>
<p>圖一, Hyper-V管理介面</p>
<p>&nbsp;</p>
<p><strong>PowerShell 指令</strong></p>
<p>要達成VM開關機管理所需要的PowerShell有三個，列出VM、執行開機、執行關機，其餘的作業就可以交由ASP.NET 依據業務需求進行調整。</p>
<p>下列範例只需要修改highlight部分即可，其中包含VMM Cluster Name及VM名稱。</p>
<pre class="scroll"><code class="csharp"># <span style="color: #ff0000;">List VM in VMM Cluster</span><br />Get-ClusterGroup -Cluster <span style="background-color: #ffff99;">ClusterName</span> | ?{$_.GroupType -eq 'VirtualMachine'}<br /> <br /># <span style="color: #ff0000;">Start VM</span><br />Get-ClusterGroup -Cluster <span style="background-color: #ffff99;">ClusterName</span> -name <span style="background-color: #ffff99;">vmName</span> | Get-ClusterResource | get-vm | <span style="background-color: #ffffff;">Start-VM</span><br /> <br /># <span style="color: #ff0000;">Stop VM</span><br />Get-ClusterGroup -Cluster <span style="background-color: #ffff99;">ClusterName</span> -name <span style="background-color: #ffff99;">vmName</span> | Get-ClusterResource | get-vm | <span style="background-color: #ffffff;">Stop-VM</span> -force</code></pre>
<p>&nbsp;</p>
<p><strong>ASP.NET 範例</strong></p>
<p>1. 專案中需要加入System.Management.Automation的參考。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/8400.VMM-4.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/8400.VMM_2D00_4.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/8400.VMM-4.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/8400.VMM_2D00_4.jpg" alt="" border="0" /></a></p>
<p>圖二, 加入System.Management.Automation的參考</p>
<p>&nbsp;</p>
<p>2. 先列出VMM cluster中的所有VM。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/6052.VMM-2.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/6052.VMM_2D00_2.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/6052.VMM-2.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/6052.VMM_2D00_2.jpg" alt="" border="0" /></a></p>
<p>圖三, ASP.NET列出VM</p>
<p>&nbsp;</p>
<p>3. 將需要開機或是關機的VM，移至開關機清單中，並設定其順序及間格時間後，設定完成後，就可以執行對應作業。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/2671.VMM-3.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/2671.VMM_2D00_3.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/2671.VMM-3.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/2671.VMM_2D00_3.jpg" alt="" border="0" /></a></p>
<p>圖四, 設定開關機順序</p>
<p>&nbsp;</p>
<p>Enjoy!</p>]]></content:encoded>
    </item>
    <item>
      <title>IIS URL Rewrite - 如何建立 HTTP 轉 HTTPS 及 Reverse Proxy</title>
      <link>https://docs.microsoft.com/archive/blogs/griffey/iis-url-rewrite-http-https-reverse-proxy</link>
      <pubDate>Tue, 14 Jul 2015 20:17:25 GMT</pubDate>
      <dc:creator><![CDATA[griffeyying.ms@hotmail.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/griffey/2015/07/14/iis-url-rewrite-http-https-reverse-proxy/</guid>
      <description><![CDATA[IIS URL Rewrite功能可用來快速建立低成本的Reverse Proxy伺服器，透過web.config 或 IIS...]]></description>
      <content:encoded><![CDATA[<p>IIS URL Rewrite功能可用來快速建立低成本的Reverse Proxy伺服器，透過web.config 或 IIS UI設定就可以完成所有設定。</p>
<p>我挑出兩個最常用的功能:&nbsp;HTTP 轉 HTTPS 及 Reverse Proxy，提供作法給各位參考。</p>
<p><strong>建立 HTTP 轉 HTTPS 規則:&nbsp;</strong></p>
<p>1. 在需要設定HTTP轉HTTPS的IIS 站台或是虛擬目錄上，選擇URL Rewrite功能。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/6712.0715-1.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/6712.0715_2D00_1.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/6712.0715-1.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/6712.0715_2D00_1.jpg" alt="" border="0" /></a></p>
<p>圖一, IIS URL Rewrite功能</p>
<p>&nbsp;</p>
<p>2. &nbsp;新增Inbound Rule，請參考下圖設定<span style="background-color: #ffff99;">Pattern, Condition 及 Action</span>，簡單的三個設定，就可以將http://aaa.com/bbb 訪問，轉換為https://aaa.com/bbb&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/6574.0715-2.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/6574.0715_2D00_2.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/6574.0715-2.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/6574.0715_2D00_2.jpg" alt="" border="0" /></a></p>
<p>圖二, URL Rewrite Inbound Rule</p>
<p>&nbsp;</p>
<p><strong>建立 Reverse Proxy 規則:&nbsp;</strong></p>
<p>建立Reverse Proxy是為了保護內部的content server，這表示使用者並不會知道內部content server實際的IP, Port等資訊，因此Reverse Proxy的關鍵在於Outbound Rule的設定。</p>
<p>Outbound Rule是用來調整送出給使用者的網頁內容，將與content server有關的內容，置換為Reverse Proxy的內容，由於網頁內容五花八門，提供下列萬用Outbound Rule 希望對各位有幫助。</p>
<p>Note: 請修改對應目錄中的web.config檔案，下列設定以http://aaa.com/bbb 作為範例。</p>
<table border="0">
<tbody>
<tr>
<td>
<pre>&lt;<span style="background-color: #ffff99;">outboundRules</span>&gt;<br />		&lt;rule name="RestoreAcceptEncoding" preCondition="NeedsRestoringAcceptEncoding"&gt;<br />                    &lt;match serverVariable="HTTP_ACCEPT_ENCODING" pattern="^(.*)" /&gt;<br />                    &lt;action type="Rewrite" value="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" /&gt;<br />                &lt;/rule&gt;<br />                &lt;rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1" stopProcessing="true"&gt;<br />                    &lt;match filterByTags="A, Area, Base, Form, Img, Input, Link, Script" pattern="<span style="color: #ff0000;">^http(s)?://InternalContentServerIP/folder/(.*)</span>" /&gt;<br />                    &lt;conditions logicalGrouping="MatchAll" trackAllCaptures="true" /&gt;<br />                    &lt;action type="Rewrite" value="<span style="color: #ff0000;">https://aaa.com/bbb/{R:2}</span>" /&gt;<br />                &lt;/rule&gt;<br />                &lt;rule name="RewriteResponseLocation" stopProcessing="true"&gt;<br />                    &lt;match serverVariable="RESPONSE_Location" pattern="<span style="color: #ff0000;">^http(s)?://InternalContentServerIP/folder/(.*)</span>" /&gt;<br />                    &lt;conditions logicalGrouping="MatchAll" trackAllCaptures="true" /&gt;<br />                    &lt;action type="Rewrite" value="<span style="color: #ff0000;">https://aaa.com/bbb/{R:2}</span>" /&gt;<br />                &lt;/rule&gt;<br />                &lt;rule name="RewriteRelativePath1-1" preCondition="ResponseIsHtml1" enabled="true" stopProcessing="true"&gt;<br />                    &lt;match filterByTags="A, Area, Base, Form, Img, Input, Link, Script" pattern="<span style="color: #ff0000;">^/bbb/(.*)</span>" negate="false" /&gt;<br />                    &lt;conditions logicalGrouping="MatchAll" trackAllCaptures="true" /&gt;<br />                    &lt;action type="Rewrite" value="<span style="color: #ff0000;">/bbb/{R:1}</span>" /&gt;<br />                &lt;/rule&gt;<br />                &lt;rule name="RewriteRelativePath1-2" preCondition="ResponseIsHtml1" enabled="true" stopProcessing="true"&gt;<br />                    &lt;match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="<span style="color: #ff0000;">^http(s)?://(.*)</span>" negate="false" /&gt;<br />                    &lt;conditions logicalGrouping="MatchAll" trackAllCaptures="true" /&gt;<br />                    &lt;action type="Rewrite" value="<span style="color: #ff0000;">{R:0}</span>" /&gt;<br />                &lt;/rule&gt;<br />                &lt;rule name="RewriteRelativePath1-3" preCondition="ResponseIsHtml1" enabled="true" stopProcessing="true"&gt;<br />                    &lt;match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="<span style="color: #ff0000;">^mailto:(.*)</span>" negate="false" /&gt;<br />                    &lt;conditions logicalGrouping="MatchAll" trackAllCaptures="true" /&gt;<br />                    &lt;action type="Rewrite" value="<span style="color: #ff0000;">{R:0}</span>" /&gt;<br />                &lt;/rule&gt;<br />                &lt;rule name="RewriteRelativePath1-4" preCondition="ResponseIsHtml1" enabled="true" stopProcessing="true"&gt;<br />                    &lt;match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="<span style="color: #ff0000;">^javascript:(.*)</span>" negate="false" /&gt;<br />                    &lt;conditions logicalGrouping="MatchAll" trackAllCaptures="true" /&gt;<br />                    &lt;action type="Rewrite" value="<span style="color: #ff0000;">{R:0}</span>" /&gt;<br />                &lt;/rule&gt;<br />                &lt;rule name="RewriteRelativePath1" preCondition="ResponseIsHtml1" enabled="true" stopProcessing="true"&gt;<br />                    &lt;match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="<span style="color: #ff0000;">^/(.*)</span>" negate="false" /&gt;<br />                    &lt;conditions logicalGrouping="MatchAll" trackAllCaptures="true" /&gt;<br />                    &lt;action type="Rewrite" value="<span style="color: #ff0000;">{R:1}</span>" /&gt;<br />                &lt;/rule&gt;<br />                &lt;rule name="RewriteRelativePath2-2" preCondition="ResponseIsHtml1" enabled="true" stopProcessing="true"&gt;<br />                    &lt;match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="<span style="color: #ff0000;">^bbb/(.*)</span>" negate="false" /&gt;<br />                    &lt;conditions logicalGrouping="MatchAny" trackAllCaptures="true" /&gt;<br />                    &lt;action type="Rewrite" value="<span style="color: #ff0000;">{R:1}</span>" /&gt;<br />                &lt;/rule&gt;<br />                &lt;rule name="RewriteRelativePath2-1" preCondition="ResponseIsHtml1" enabled="true" stopProcessing="true"&gt;<br />                    &lt;match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="<span style="color: #ff0000;">^(.*)</span>" negate="false" /&gt;<br />                    &lt;conditions logicalGrouping="MatchAny" trackAllCaptures="true"&gt;<br />                        &lt;add input="{<span style="color: #ff0000;">REQUEST_URI</span>}" pattern="<span style="color: #ff0000;">bbb/</span>" /&gt;<br />                    &lt;/conditions&gt;<br />                    &lt;action type="Rewrite" value="<span style="color: #ff0000;">./{R:1}</span>" /&gt;<br />                &lt;/rule&gt;<br />                &lt;rule name="RewriteRelativePath2" preCondition="ResponseIsHtml1" enabled="true" stopProcessing="true"&gt;<br />                    &lt;match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="<span style="color: #ff0000;">^(.*)</span>" negate="false" /&gt;<br />                    &lt;conditions logicalGrouping="MatchAny" trackAllCaptures="true"&gt;<br />                        &lt;add input="{<span style="color: #ff0000;">REQUEST_URI</span>}" pattern="<span style="color: #ff0000;">bbb/(.*)</span>" /&gt;<br />                    &lt;/conditions&gt;<br />                    &lt;action type="Rewrite" value="<span style="color: #ff0000;">/bbb/{R:1}</span>" /&gt;<br />                &lt;/rule&gt;<br />                <br />                &lt;rule name="RewriteRelativePath3" preCondition="ResponseIsHtml1" enabled="true" stopProcessing="true"&gt;<br />                    &lt;match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="<span style="color: #ff0000;">(.*)</span>" negate="false" /&gt;<br />                    &lt;conditions logicalGrouping="MatchAll" trackAllCaptures="true"&gt;<br />                        &lt;add input="{<span style="color: #ff0000;">REQUEST_FILENAME</span>}" pattern="<span style="color: #ff0000;">bbb/(.*)</span>" negate="true" /&gt;<br />                    &lt;/conditions&gt;<br />                    &lt;action type="Rewrite" value="<span style="color: #ff0000;">/bbb/{R:1}</span>" /&gt;<br />                &lt;/rule&gt;<br />               <br />                &lt;preConditions&gt;<br />                    &lt;preCondition name="ResponseIsHtml1" logicalGrouping="MatchAny"&gt;<br />                        &lt;add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" /&gt;<br />                        &lt;add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/plain" /&gt;<br />                    &lt;/preCondition&gt;<br />                    &lt;preCondition name="NeedsRestoringAcceptEncoding"&gt;<br />                        &lt;add input="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" pattern=".+" /&gt;<br />                    &lt;/preCondition&gt;<br />                &lt;/preConditions&gt;</pre>
<pre>&lt;/<span style="background-color: #ffff99;">outboundRules</span>&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong>Enjoy!</strong></p>]]></content:encoded>
    </item>
    <item>
      <title>[Azure] Azure Web Apps - 如何解決突發性效能問題</title>
      <link>https://docs.microsoft.com/archive/blogs/griffey/azure-azure-web-apps</link>
      <pubDate>Tue, 14 Jul 2015 01:00:00 GMT</pubDate>
      <dc:creator><![CDATA[griffeyying.ms@hotmail.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/griffey/2015/07/14/azure-azure-web-apps/</guid>
      <description><![CDATA[在IIS Server的應用程式集區設定中，我們可以透過集區回收條件來暫時排除突發性的效能問題，
以下圖為例，我們可依據Private Memory Size, Request Limit...]]></description>
      <content:encoded><![CDATA[<p>在IIS Server的應用程式集區設定中，我們可以透過集區回收條件來暫時排除突發性的效能問題，</p>
<p>以下圖為例，我們可依據Private Memory Size, Request Limit 等條件來觸發應用程式集區進行回收，以保持ASP.NET及其相關應用程式能保持正常運作。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/3542.1.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/3542.1.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/3542.1.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/3542.1.jpg" alt="" border="0" /></a>&nbsp;</p>
<p>圖一, IIS 應用程式集區回收設定</p>
<p>&nbsp;</p>
<p>目前Azure Web Apps 的 Azure App Service Support 也能提供類似功能來維持 Web App 常保健康。</p>
<p><strong>情況一</strong><strong>: Max Request</strong></p>
<p>可設定進入的訪問數量及間隔時間。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/0647.2.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/0647.2.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/0647.2.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/0647.2.jpg" alt="" border="0" /></a>&nbsp;</p>
<p>圖二, 設定Max Request 數量</p>
<p>&nbsp;</p>
<p><strong>情況二</strong><strong>: Status Code</strong></p>
<p>可設定特定的status code，例如: 500 error code.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/04873.3.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/04873.3.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/04873.3.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/04873.3.jpg" alt="" border="0" /></a>&nbsp;</p>
<p>圖三, 設定Status Code</p>
<p>&nbsp;</p>
<p><strong>情況三</strong><strong>: Slow Requests</strong></p>
<p>可設定多少的訪問超過指定的訪問時間。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/7462.4.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/7462.4.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/7462.4.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/7462.4.jpg" alt="" border="0" /></a>&nbsp;</p>
<p>圖四, 設定Slow Request</p>
<p>&nbsp;</p>
<p><strong>情況四</strong><strong>: </strong><strong>設定</strong><strong>Private Memory</strong></p>
<p>可設定指定記憶體大小，當Web App的記憶體使用量到達此上限，就會執行對應作業。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/7776.5.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/7776.5.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/7776.5.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/7776.5.jpg" alt="" border="0" /></a>&nbsp;</p>
<p>圖五, 設定Private Memory&nbsp;</p>
<p>&nbsp;</p>
<p>Rule設定完成後，接下來我們就可以設定對應的處理方式，目前支援的作業有三種:&nbsp;<span style="background-color: #ffff99;">Recycle, Log Event 及 Custom Action</span>。 選擇Recycle就如同在IIS Server應用程式集區的設定回收作業相同。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/6076.6.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/6076.6.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/6076.6.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/6076.6.jpg" alt="" border="0" /></a>&nbsp;</p>
<p>圖六, 設定Rule觸發後對應執行的Action</p>
<p>&nbsp;</p>
<p>我特別要提到的功能是Custom Action，此功能可以執行特定exe檔。</p>
<p>以預設功能來說，我們可以收集問題發生時的memory hang dump，因此我們可以收集到可供後續分析的memory dump，以便於順利找出實際問題。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/2604.7.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/2604.7.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/2604.7.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/2604.7.jpg" alt="" border="0" /></a>&nbsp;</p>
<p>圖七, 設定Custom Action</p>
<p>&nbsp;</p>
<p>Enjoy!&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Azure Web Apps - 如何針對特定錯誤進行除錯</title>
      <link>https://docs.microsoft.com/archive/blogs/griffey/azure-web-apps</link>
      <pubDate>Sun, 05 Jul 2015 04:04:05 GMT</pubDate>
      <dc:creator><![CDATA[griffeyying.ms@hotmail.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/griffey/2015/07/05/azure-web-apps/</guid>
      <description><![CDATA[對於Azure Web Apps的使用者來說，&nbsp;Azure App Service Support 是我們的好朋友，還不知道該如何使用，請參考 這篇。
若Azure Web Apps...]]></description>
      <content:encoded><![CDATA[<p>對於Azure Web Apps的使用者來說，&nbsp;<strong><a class="logo-1">Azure App Service Support </a></strong>是我們的好朋友，還不知道該如何使用，請參考 <a href="http://blogs.msdn.com/b/griffey/archive/2015/07/05/azure-web-app-azure-websites.aspx" target="_parent">這篇</a>。</p>
<p>若Azure Web Apps 持續出現特定錯誤，可利用<a class="logo-1">Azure App Service Support 中的Analyze功能快速找到問題點：</a></p>
<p><span style="font-size: small;"><strong>使用方式：</strong></span></p>
<p>先至Azure Portal - Web Apps - Diagnostics Logs - <span style="background-color: #ffff99;">Failed Request Tracing</span> 功能設定為[<span style="background-color: #ffff99;">On</span>]。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/6406.5.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/6406.5.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/6406.5.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/6406.5.jpg" alt="" border="0" /></a></p>
<p>圖一, 在Azure Portal中，將Web App的log功能開啟</p>
<p>&nbsp;</p>
<p>待問題重現後，訪問&nbsp;<a class="logo-1">Azure App Service Support site - Analyze - <span style="background-color: #ffff99;">FREB Logs</span> ，就可以找到對應錯誤log。</a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/2055.6.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/2055.6.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/2055.6.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/2055.6.jpg" alt="" border="0" /></a></p>
<p>圖二,&nbsp;<a class="logo-1">Azure App Service Support site中的Analyze功能</a></p>
<p>&nbsp;</p>
<p>在FREB log中可以檢查完整的錯誤訊息內容，可幫助快速釐清問題原因並解決問題。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/8228.7.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/8228.7.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/8228.7.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/8228.7.jpg" alt="" border="0" /></a></p>
<p>圖三, FREB log</p>
<p>&nbsp;</p>
<p>Enjoy!</p>
<p><span><br /></span></p>]]></content:encoded>
    </item>
    <item>
      <title>如何針對 Azure Web App / Azure Websites 進行除錯</title>
      <link>https://docs.microsoft.com/archive/blogs/griffey/azure-web-app-azure-websites</link>
      <pubDate>Sun, 05 Jul 2015 01:53:43 GMT</pubDate>
      <dc:creator><![CDATA[griffeyying.ms@hotmail.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/griffey/2015/07/05/azure-web-app-azure-websites/</guid>
      <description><![CDATA[過去我們都會運用Azure Web KUDU console 進行問題排除或除錯，目前有更好的工具提供給Azure Web App 管理及開發人員:&nbsp;Azure App Service...]]></description>
      <content:encoded><![CDATA[<p><span style="font-family: arial, helvetica, sans-serif;">過去我們都會運用Azure Web KUDU console 進行問題排除或除錯，目前有更好的工具提供給Azure Web App 管理及開發人員:&nbsp;<span style="color: #000080;"><strong><a class="logo-1"><span style="color: #000080;">Azure App Service Support</span></a></strong></span></span></p>
<p><strong><span style="font-size: small; font-family: arial, helvetica, sans-serif;">使用方式：</span></strong></p>
<p>訪問&nbsp;https://yourAzureWebAppName.<span style="background-color: #ffff00;">scm</span>.azurewebsites.net/<span style="background-color: #ffff00;">support</span></p>
<ol>
<li>若已經登入Azure Portal，則可以自動登入Azure App Service Support 網站。</li>
<li>若尚未登入Azure Portal，則可以透過https://yourAzureWebAppName.scm.azurewebsites.net/<span style="background-color: #ffff00;">basicauth</span>，進行登入。</li>
</ol>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/2746.1.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/2746.1.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/2746.1.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/2746.1.jpg" alt="" border="0" /></a></div>
<p>圖一, 選擇要進行除錯的Web App</p>
<p>&nbsp;</p>
<p><strong><span style="font-size: small;">功能一: 效能觀察</span></strong></p>
<p>目前有提供平均每秒訪問數量(Avg. Requests/sec) 及平均每秒伺服器錯誤 (Avg. Server Errors/sec) 這兩個觀察指標供管理人員進行初步判斷此Web App是否有效能問題。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/1643.2.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/1643.2.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/1643.2.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/1643.2.jpg" alt="" border="0" /></a></p>
<p>圖二, Observe 功能提供整體效能觀察</p>
<p>&nbsp;</p>
<p><strong><span>功能二: 問題分析</span></strong></p>
<p>若Web App 有效能問題，可點選 [<span style="background-color: #ffff00;">Diagnose Now</span>] 進行立即診斷，稍等片刻後即可在下方得到Event log, Memory dump, HTTP log, PHP error log及PHP Process report 等log檔案，這些檔案就可以提供後續問題分析的依據。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/0027.3.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/0027.3.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/0027.3.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/0027.3.jpg" alt="" border="0" /></a></p>
<p>圖三, Analyze 提供相關log收集及分析功能</p>
<p>&nbsp;</p>
<p><strong><span>功能三: 問題緩解</span></strong></p>
<p>若問題在短時間內無法被解決或是想要有個快速解決方案，Mitigate功能提供了快速解藥: 可以針對[Max Request], [Status Code], [Slow Request], [Memory Private Set] 這四種常見問題情況進行設定，</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/3223.4.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/3223.4.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/55/3223.4.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-55/3223.4.jpg" alt="" border="0" /></a></p>
<p>圖四, Mitigate提供常見問題緩解規則設定</p>
<p>&nbsp;</p>
<p>後續我會繼續提供Analyze及Mitigate深入應用範例。 Enjoy!&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
  </channel>
</rss>