發表文章

目前顯示的是有「IIS」標籤的文章

使用DevTunnel公開本機URL

圖片
  Foreword 使用微軟提供的Dev Tunnels取代之前使用NGROK的方式,將本機開發的URL公開在外部網路。 此方式為方便與外部服務整合測試,例如:LineAPI Dev Tunnels 有2種使用方式,以下會介紹何使用 1. Visual Studio 2022 .NetCore程式 內建就有Dev Tunnels功能,第一次使用先建立tunnels 選擇建立好的通道,執行網頁即會出現外部URL 2. 非.Net Core程式 (.Net Framework) 安裝 dev tunnels 程式 裝完後 重開機 ,環境變數位罝才會生效 winget install Microsoft.devtunnel 登入 第一次使用,需要登入Github或微軟帳號 devtunnel user login 執行本機程式,http port 50893 ps: 不能使用https 執行devtunnel 將本機程式公開,並允許匿使用者可以瀏覽 devtunnel host -p 50893 --allow-anonymous 執行後,取得公開的URL,大功告成 進入後按Continue Reference Dev Tunnels Visual Studio in 10 Minutes or Less 董大偉使用DevTunnel取代NGROK

IIS SSL憑證匯出成Linux支援的檔案

圖片
前言 Window主機上的SSL憑證是透過certify the web跟ZeroSSL申請同一網域通用的Wirdcard,現有需求需將該憑證匯出給另一台Linux主機用。 解決方式 1.在IIS先將憑證出來,匯出後為.pfx檔案,匯出時需設一組密碼。 2.初次使用OpenSSL,先將路徑設定環境變數。本文使用的是git內建的OpenSSL,C:\Program Files\Git\usr\bin\openssl.exe 3.使用OpenSSL將.pfx的 憑證檔案 匯出 openssl pkcs12 -in server.pfx -nokeys -out server-crt.pem -password "pass:1234" -nodes 4.使用OpenSSL將.pfx的 加密金鑰檔案 匯出 openssl pkcs12 -in server.pfx -nocerts -out private.pem -password "pass:1234" -nodes 5.使用OpenSSL將 加密金鑰檔案 匯出成 已解密 的金鑰檔案 openssl rsa -in "private.pem" -out "PrivateKey.key" 參數 -nokeys  私密金鑰檔 (僅輸出憑證檔案) -nocerts 伺服器憑證檔 (僅輸出金鑰檔案) -nodes  輸出一個沒有密碼保護的私密金鑰檔 -password:"pass: .pfx匯出時的密碼 " 完成後,只需要server-crt.pem及PrivateKey.key,就可以在Liunx上匯入。 其它/參考 https://blog.miniasp.com/post/2019/02/25/Creating-Self-signed-Certificate-using-OpenSSL https://justhodl.blogspot.com/2018/04/tls-ssl-crt-key-to-pem-openssl.html https://wangprince.idv.tw/tech/733 * https://www.mysysadmintips.com/windows/servers/62-export-...

關於IIS 503錯誤處理

圖片
前言 工作需求換了台新筆電後,將舊筆電的IIS設定匯進來,執行後出現503錯誤。事件檢視器訊息如下 The Module DLL C:\Windows\system32\inetsrv\aspnetcore.dll failed to load.  The data is the error. 此訊息是由於IIS的Site部份為.Net Core。本以為只要安裝好 .Net Core Hosting Bundle 就OK了,但....還是一樣會發生錯誤。 原因 此錯誤是有歷史痕跡的! 舊筆電一開始裝的是.Net Core 1.1還是2.0....忘了,其AspNetCoreModule的位置是在C:\Windows\system32\inetsrv\aspnetcore.dll。但之後的.Net Core改成AspNetCoreModuleV2,原有的已不在使用,而在我將舊筆電的IIS設定匯進來後,AspNetCoreModule的設定也匯進來到applicationHost.config了。白話說就是IIS的組態有不存在.dll的設定。 解決方式 修改組態C:\Windows\System32\inetsrv\config\applicationHost.config,將AspNetCoreModule模組移除或註解起來。 其他錯誤 在修改完後,一樣出現503錯誤,事件檢視器訊息 The Module DLL C:\Program Files\IIS\Application Request Routing\requestRouter.dll failed to load.  The data is the error. The Module DLL C:\Windows\system32\inetsrv\rewrite.dll failed to load.  The data is the error. 因為有用到Url Rewrite,此錯誤使用Web Platform將相關模組安裝好,就OK了。 其它參考 https://stackoverflow.com/questions/40161982/aspnetcore-dll-failed-to-load

.Net Core 無法發行到IIS網站

圖片
前言   之前都是使用MsDeploy來發行.net framework專案,部份專案改用.Net Core後,部署到IIS,遇到一些無法發行的問題,例如:dll使用中,無法更新、驗證錯誤等。 執行環境 Window 10 .Net Core 3.1 Visual Studio 2019 Azure DevOps 問題排解 命令列,透過發行檔發行,需使用管理權限執行。 dotnet build -c Release /p:DeployOnBuild=true /p:PublishProfile=iis-remote  /p:Password=xxxx 1.dll使用中,無法更新 解決方式: 使用app_offline.htm,讓應用程式先停止。 在發行檔加入如下即可:     <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline> 微軟文件寫道 ,專案檔上引用Microsoft.NET.Sdk.Web,在發行時就會自動加入app_offline並在發行後移除。             但我看專案明明就有引用,但就是試不出來....。--> 此方式失敗 ,記錄備查 ps:在發行檔pubxml也試用,但沒用。 2.發行到遠方主機,出現憑證錯誤。 MSDEPLOY : error Code: ERROR_CERTIFICATE_VALIDATION_FAILED 解決方式: 在發行檔加入如下:     <AllowUntrustedCertificate>true</AllowUntrustedCertificate> 3.在Azure DevOps 使用Pipeline發行時,出現SDK錯誤 ##[error]C:\Program Files\dotnet\sdk\3.1.302\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(234,5): Error N...

.Net Core IIS 503錯誤

圖片
這兩天試著把測試的Blazor App部署到IIS後,一執行就出現503錯誤,並且Pooling整個停止。 測試環境: .Net Core 3.0 Window 10 Build 17763 部署方式 503錯誤 一開始Google時查到的解決方式,大部份的文章都是裝完 ASP.NET Core Runtime & Hosting Bundle ,即可解決。但我安裝完, IIS及電腦都重開機過,但依然出現503錯誤。 查詢"事件檢視器"後,發現一些缺少.dll的錯誤。如下列表: The Module DLL C:\Windows\System32\inetsrv\isapi.dll failed to load.  The data is the error. The Module DLL C:\Windows\System32\inetsrv\iiswsock.dll failed to load.  The data is the error. The Module DLL C:\Windows\System32\inetsrv\iprestr.dll failed to load.  The data is the error. The Module DLL C:\Windows\system32\inetsrv\aspnetcore.dll failed to load.  The data is the error. 上述訊息,不是一次性的全部出現,是在我根據訊息,查詢到的可能缺少的元件,安裝後,再出另一個的訊息....昏。由於是本機測試,不管三七二十一,也不太確定是哪個安裝修正哪個錯誤了。 相關安裝: IP Address and Domain Restrictions Web Socket Web Deploy 3.6 在解決了一系列的錯誤後,最後還有另一個奇怪的錯誤要修正。為何寫在這,沒有列在上方? 因為它的解決方式較特別。 The Module DLL C:\Windows\system32\inetsrv\aspnetcor...

[debug] 分析iis log的工具Log Parser Studio

圖片
今天在查詢IIS Log時,用Notepad打開後,憑著我的鷹眼逐行搜查....。查到一半時,才想到好像有什麼GUI工具的....。馬上Google了一下,果然有一個Log Parser Studio可以使用。 安裝連結 1.安裝Log Parser 2.2 https://www.microsoft.com/en-us/download/details.aspx?id=24659 2.Log Parser Studio https://gallery.technet.microsoft.com/Log-Parser-Studio-cd458765 如何使用 選擇Log 來源 使用現成的Library查詢,本例查詢較緩慢的Request 上方是結果,下方是查詢語法,你也可以複製出來改成你要的。 time-taken 為毫秒,例:5000=5秒 Ps: 馬的...有種從古代來到了現代的感覺。 參考來源 Log Parser Studio介紹 https://dotblogs.com.tw/kinanson/2017/08/18/145528 如何取得IIS記錄檔 https://note.robinks.net/2013/09/how-to-get-iis-log-files.html

使用WinDbg偵錯CPU使用率過高原因

圖片
昨天同事回報,主機上IIS 的CPU不定時衝高50~99%。本想說dump w3wp.exe回來使用WinDbg偵錯。但它間歇性的衝高,一下子就回復了,所以很難dump到在CPU衝高的狀態。幸好微軟提供了針對此狀況的dump工具「 P rocdump 」 ,用來監控特定的process,當超過CPU設定值後自動dump。 Procdump  Download & Setup 下載路徑 教學文章 安裝後,在開始功能列會看到32及64位元的ICON 使用管理者執行cmd -ma 包含所有ram、thread的信息 -r 讓目前的w3wp可以在不用暫停的情況下dump,缺點是會花費較長的時間dump 17488 為w3wp.exe的Process Id -c 50 cpu超過50% -s 3  持續超過3秒 -n 工具退出前要抓取多少個dump文件,例:設-n 2 代表會等觸發了2次dump文件後關閉監控 D:\Downloads\Procdump\procdump.exe -ma -r -c 50 -s 3 -n 1 17488 -o D:\dumpfile WinDbg Download & Setup Dump的檔案,可以透過WinDbg分析除錯 下載路徑 教學文章 只勾選一個Debugging Tools for Windows WinDbg Command 1.先載入dumpfile 2.設定路徑,由微軟網站下載分析需要的Symbol檔 .sympath srv*D:\Temp\debug\RTX64_SYMBOLS*https://msdl.microsoft.com/download/symbols 3. 指定顯示完整Symbol下載資訊 !sym noisy 4. 載入 CLR 偵錯相關模組 .cordll -ve -u  -l 5. 找出佔用 CPU 最多的 Thread,本案例中,Thread 29為使用最長的時間 !runaway 將偵錯對象切換成 T...

IIS網站更新後第一次執行異常緩慢

測試主機的網站,最近只要程式有更新,第一次執行會異常得緩慢.....要花費約10分鐘之久!真是有夠誇張。將Pooling回收測試,只要20秒。研判應該是跟程式在第一次執行時編譯有關。 為先証明程式本身是沒有問題的下,我又在IIS建立另一個網站來試,測試結果只要30秒.....昏,同一份程式在同一主機下的不同Site,會有不同的結果。在查詢相關文章後,才知道是IIS  Temporary ASP.NET Files目錄過大的問題。 解決方式 刪除暫存目錄。一開始在檔案總管要刪除,但目錄太大,進度視窗跑不完。所以改用如下的PowerShell刪除,並使用強制刪除及忽略參數(太久沒清,執行50分鐘)。此方式可以不用在停止IIS的狀況下刪除檔案。 Get-ChildItem "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET  Files\" -Recurse | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue ps:為避免日後再發生,將它設定到排程在假日時執行,一勞永逸。 參考連結 https://www.itread01.com/content/1501827610.html

IIS 設定只允許特定IP進入

圖片
公司有兩台Web Server,一台對外,一台對內,現在要合併在一起,。預設網站將針對特定IP開放,而某幾個網站則對外完全開放。 如何使用  1.新增功能- IP and Domain Restriction 安裝後,在IIS Root或各網站下可以看到功能圖示 2. 設定IIS Root的存取從Allow改成Deny 3.IIS Root針對特定IP或範圍打開,本例的Mask設為255.255.255.0 代表著192.168.2.0~255可以存取 4.將特定網站對外開放 由於在第2點的IIS Root已設為deny,所有網站會繼承這個設定,而子網站自行修改值的話,則會以子網站為主,這樣就達到預設是deny,而部份是Allow 所有的設定會儲存在IIS的組態內 %windir%\System32\inetsrv\config\applicationHost.config 上述的設定操作,也可以透過Power Shell 執行 $value = @{allowed = "true" ;ipAddress = "192.168.0.1" ;subnetMask = "255.255.255.0" } #1.Setting Root Site as deny Set-WebConfigurationProperty -Filter /system.webserver/security/ipsecurity -Name allowUnlisted -Value $false #1.1 Setting Root Site denyAction as NotFound Set-WebConfigurationProperty -Filter /system.webserver/security/ipsecurity -Name denyAction -Value 'NotFound' #2.Root Site add Allow Ip add-webconfiguration /system.webServer/s...

IIS 使用Power Shell啟動已中止的Pooling

目前的網站,因大量資料的查詢,會不定時的造成Pooling中止,在還沒改善程式的狀況下,現行的處理措施,都是等到使用者通知後,手動將Pooling啟動。這樣的處理,若遇到下班或假日時,就非常的麻煩了....且久了就會讓人感覺不夠專業XD。 解決方案 寫一個PowerShell來啟動已中止的Pooling,並透過排程定時呼叫。 #要先匯入模組Get-ChildItem 才會認得IIS: Import-Module WebAdministration #1.取得所有Pooling $pools=Get-ChildItem IIS:\AppPools #2.比對要啟動的Pooling $poolMaps="PrdPooling","Prd-Download-Pooling","Sta-Pooling" for($i=0;$i -lt $pools.Length;$i++){ ##3.比對到要啟動及已停止的Pooling並啟動 if($poolMaps.IndexOf($pools[$i].Name) -gt -1 -and $pools[$i].State -eq "Stopped"){   Start-WebAppPool $pools[$i].Name   $pools[$i].Name } } 參考來源 https://docs.microsoft.com/en-us/powershell/module/webadminstration/start-webapppool?view=winserver2012-ps https://stackoverflow.com/questions/24392696/getting-cant-find-the-drive-the-drive-called-iis-does-not-exist

Host file無法繫結IIS

圖片
問題  今天要在本機IIS Site模擬某一個DSN作測試,但一直得到錯誤 ERR_CONNECTION_REFUSED

Unable to launch the IIS Express Web server

圖片
   今天早上程式寫完後,按下F5執行網頁,出現無法執行IIS Express的錯誤....。以往遇到此錯誤訊息,通常都是重開VisualStudio,若再不行的話則要重開機才會好。  每次遇到都要重開需浪費不少時間,才能再重新進入工作狀況,為避免此狀況再來影響工作,決定藉此次來找解決方式。

IIS多個網站共用同一份程式

圖片
  目前在運行的網站,因業務需求,獨出另一個網站及資料庫。在布署網站時會分別發佈到2個不同的資料夾。兩個資料夾的程式一模一樣,只差在web.config的ConnectionString不同。目前只有2個網站,布署工作還算簡單,未來若繼續擴增時,除了發行工作會越來越多,同步及除錯上的問題也是另一要考量的地方。 解決方式 將多個網站指向同一位置,此作法為同一程式目錄,但不使用目錄內web.config的ConnectionString,而是使用在IIS上所設定的。作法如下:

[.NET Core] IIS 設定環境變數

圖片
   .NET Core Web專案在部署時,可以依據不同的環境變數切換不同的組態設定,例:appsettings.{env.EnvironmentName}.json。本文介紹針對部署至IIS後,如何在IIS上設定環境變數,來達到各階段的Site區分 例:QAS、Staggin、Production Step by Step 1.在目標Site上打開Configuration Editor

IIS Management–Power Shell

圖片
前一陣子看到 某篇介紹CI文章 時,在章節的後面,提到使用Power Shell管理IIS(作者還沒寫到實作內容)。等不及作者後續的文章,自己先針對可能會用到的功能實作練習一下。 IIS Command 基本指令:取得Site、備份、還原、更改實體路徑, 更多指令請參考 IIS Remote 確定基本指令可以使用後,再來練習如何操作遠方主機。 1.初次使用,若Client端未加入Domain,須作如下設定 後記:在Window 10執行,會出現錯誤訊息如下: 解決方法將網路改為私有:Set-NetConnectionProfile -InterfaceAlias 乙太網路 -NetworkCategory Private 參考連結 2.透過帳號密碼進入遠方主機 上方指令執行完後,就已進入遠方主機的Session,此時下的任何指令,都是執行在主機上。 3.若不使用進入主機的方式,也可以直接使用Invoke-Command 來執行 參考來源   http://serverfault.com/questions/657918/remote-ps-session-fails-on-non-domain-server/657923#657923?newreg=bc5b77333d334495a1d62b980ea3c0d8 http://stackoverflow.com/questions/10011794/hardcode-password-into-powershells-new-pssession

IIS將網芳目錄設成站台

圖片
  平時執行測試工作的主機,想將測試結果(.html,.xml等靜態檔案)讓外面可以直接透過Web直接瀏覽。由於此台主機對外並沒有開放,所以我將目錄設定共用後,透過另一台對外主機的IIS,將位置指定過來。如下圖 執行後,得到錯誤訊息,權限不足

IIS 8 自動預熱

圖片
  使用者反應第一次載入網頁很慢,想說目前的IIS 已有設定Always Running,照理說Pooling 回收後,應用程式應會自動執行,而不至於很慢才對。 如下設定: Pooling Setting Site Setting 實際測試時,在Applicaiton_Start輸出Log來觀察Pooling回收時,應用程式是否被執行。手動將Pooling後,Application_Start並沒有跑.....,查了一下相關文章,發現少裝了Application Initialization。 進一步指定網頁執行   上述的Application Initialization裝完後,每次的Pooling回收,就會自動執行應用程式。而若想在Pooling回收後,自動先執行特定網頁,可以在組態檔設定applicationInitialization,如下 ps:initializationPage可以設定多筆,但值不能重複 參考來源 http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-application-initialization http://serverfault.com/questions/590865/how-can-i-warm-up-my-asp-net-mvc-webapp-after-an-app-pool-recycle