NGINX for Windows轉移NGINX for Linux注意事項
最近終於把早期的 NGINX for Windows 轉移至 NGINX for Linux,在轉移過程有不少平台差異造成設定上需微調。以下整理 NGINX from Windows to Linux 一些組態的差異性,以及轉移後進行的一些調整。
最近終於把早期的 NGINX for Windows 轉移至 NGINX for Linux,在轉移過程有不少平台差異造成設定上需微調。以下整理 NGINX from Windows to Linux 一些組態的差異性,以及轉移後進行的一些調整。
現在SSL憑證改成最長時效只有一年已經好幾年了。因此,一開始的故事很簡單,SSL憑證更新之後公司內網所有對此服務(我們暫定為:https://api.kkbruce.net/,雖有點圖文不符,反正就是個含正式SSL憑證的端點)的請求一律失敗(如上圖)!真的是嚇死寶寶了。整個追蹤的時間很長,我盡量整理重點說明就好,但這一路下來,對於整個SSL憑證又多瞭解了一些。
故事是這樣,我們需要為NGINX(for Windows)服務加上 HTTPS 的 SSL/TLS 憑證。公司提供的是 .pfx 檔(PFX容器形式的憑證,PKCS#12格式),通常在 Windows Server/IIS Server 上使用沒什麼難度,一、匯入 .pfx 到 Windows Server;二、到 IIS Server 設定匯入 SSL/TLS 憑證。後來研究發現,NGINX 無法直接使用 .pfx 檔來設定,也是說需要轉換格式後才能提供 Linux Based 的應用程式來使用。
在容器主機(Container Host)中,還蠻有機會碰到 Disk 容量不足的情況。通常會先請 Infra 同事做擴充,因為我們習慣用 Server Core,因此需要用指令來去進行擴充磁碟區的動作。
一般,大多會找到或教你用 diskpart 來進行操作。雖然有大量範例可查,但 diskpark 有點繁瑣,而且用了多次,也沒記起來過,每次都要重找,而要小心的下 diskpark 指令。
想說,官方 PowerShell 不知道有無支援那麼底層操作指令。查了一下,還真得有。
# Variable specifies the disk drive to extend
$drive_letter = "D"
# Script gets the partition sizes, and resizes the volume
$size = (Get-PartitionSupportedSize -DriveLetter $drive_letter)
Resize-Partition -DriveLetter $drive_letter -Size $size.SizeMax
去除第一行參數指令不算的話,兩個指令就能完成擴充磁碟區。簡單,好用,不管什麼 PowerShell,都給我來一份。
今天要測個MS SQL的東西時,啟動MS SQL容器時發生Ports are not available錯誤。
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" -p 1433:1433 --name sql1 --hostname sql1 -d mcr.microsoft.com/mssql/server:2022-latest
c71dce344559b7e9188144b69329bdeca50e85984742d0c97ea73d3b1a40c5cf
docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:1433 -> 0.0.0.0:0: listen tcp 0.0.0.0:1433: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
由於公司環境的關係,此部落格上有許多關於 Proxy 的討論。對,這篇也是。簡單來說,假設我們一台 Proxy,這台 Proxy 採用帳密認證後才能使用。如果查詢相關資料,大致可以看到一般會透過以下格式來連線設定:
http://username:password@IP:Port/
Robocopy 是 Robust File Copy for Windows 的簡稱。它是一支 Windows 系統內建的檔案複製、同步、搬移指令,它利用多執行緒來提高複製效能,但在高效的背後資源使用率確出奇的低。另一重點是,它提供了非常多元參數,讓管理者能非常靈活的組合出想要所需複製的檔案與行為,複製、同步、差異、鏡像都不是問題,排程、監視也有內建功能,功能之強大,我覺得完全不輸商用軟體,更重要的它是 Windows 內建也就沒有商用授權問題。但官方說明文件會讓你不知如何下手,此篇讓我們用大量範例來說明每個參數用法,教大家成為備份大師。
同事入手新設備,他知道我改用winget許久,說他也想改用winget來安裝軟體。之前新設備有將清單整理下來,就順手提供。以下是我的winget軟體安裝清單。我本身是開發人員,因此,軟體的選擇上會偏重開發人員。在此可以先提供一小技巧,可以完整取得winget上的軟體清單。
winget search --query "" | Out-File AllWingetList.txt
在Azure VM上有個高風險警告,原本以為用之前「停用不安全的TLS版本」的IISCrypto工具處理即可,以下借用黑大的PowerShell取得IISCrypto套用的結果。
PS D:\> Get-ChildItem -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers'
Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers
Name Property
---- --------
AES 128/128 Enabled : 4294967295
AES 256/256 Enabled : 4294967295
DES 56/56 Enabled : 0
NULL Enabled : 0
RC2 128/128 Enabled : 0
RC2 40/128 Enabled : 0
RC2 56/128 Enabled : 0
RC4 128/128 Enabled : 0
RC4 40/128 Enabled : 0
RC4 56/128 Enabled : 0
RC4 64/128 Enabled : 0
Triple DES 168 Enabled : 4294967295
PS D:\> Get-ChildItem -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\' -Recurse |
>> ForEach-Object {
>> $p = Get-ItemProperty -Path $_.PSPath
>> if ('Enabled' -in $p.PSObject.Properties.Name) {
>> $_.PSPath.Split(':')[2]
>> "Enabled = $($p.Enabled)"
>> }
>> }
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\Multi-Protocol Unified Hello\Client
Enabled = 0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\Multi-Protocol Unified Hello\Server
Enabled = 0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT 1.0\Client
Enabled = 0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT 1.0\Server
Enabled = 0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client
Enabled = 0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server
Enabled = 0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client
Enabled = 0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server
Enabled = 0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client
Enabled = 4294967295
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server
Enabled = 4294967295
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client
Enabled = 4294967295
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server
Enabled = 4294967295
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
Enabled = 4294967295
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server
Enabled = 4294967295
但沒想到前後調了幾天都沒讓它Pass,最後全部自己手動調整機碼才完成。(時間有點長是因為,調整完要等Azure去重新掃描,好像12小時才一次,因此一天調一次。)
TLS調整這部分的資訊蠻零散,修改前記得相關主題裡的注意事項要看一下,不然修改後出事,我可不負責哦。
故事是這樣的,我在PowerShell Core環境下開發了一個PowerShell Module。但不是每一台Windows Server都有PowerShell Core的執行環境,當部屬至Windows Server的PowerShell時才發現某些主機怪怪的。
此Module在我Windows 11開發機裡的PowerShell或PowerShell Core都有先測試過都,都能正常執行。
兩台不同的Windows Server 2019主機上,PowerShell的Import-Module一台正常,一台不正常。而且在特定同事的開發機上也有類似的情況,也會出現匯入錯誤的情況。
最近不論內部或外部,慢慢都能看到停用TLS的資訊。順手整理一下相關資訊,以利未來要作業時可能參考。
請先參考黑大及官方文件:
第一篇一定要注意,不要搞到設定之後連RDP都連不進伺服器就好笑了。
最近購入新的個人工作機(Surface Pro 9),在轉移資料與應用程式方面採用了幾個不同的方式,覺得又發現一條的路徑,以下整理一些採用的作法給大家參考看看。
資料轉移方面,Windows+OneDrive是最佳組合。新主機登入完Microsoft帳號之後,等待一些同步時間之後,資料就同步完畢,完全無腦,這就不再多說。
之前在Biztalk上的應用程式出錯的機會不大,可能也只有上線初期抓幾隻小蟲,而且內部應用程式本身也都有例外通知機制,一直運作的不錯。但最近上線的一支Biztalk應用程式,接收到的來源端B2B資訊不符合原先的需求規格,也就是說,一開始就被Biztalk擋下,根本就還沒進到應用程式之內,造成此筆錯誤的B2B資訊沒有被處理到,也因為沒進到應用程式之內,根本就不會觸發應用程式內的錯誤通知功能。也就是說,我們根本就不知有此錯誤,造成處理上的時差。
我們先在本機進行 Redis for Windows 的 Master-Slave-Sentinel 架構測試。由於微軟官方已經不再繼續維護 Redis for Windows,目前還有一位 tporadowski fork 後持繼在更新與維護。讓我們謝謝他。
在 安裝 PowerShell - Active Directory Module 解決 AD 大小事 裡有介紹 Windows 10 如何安裝 RSAT 工具,以取得 Windows 10 的 PowerShell - Active Directory Module 的功能,不過,按照原始連結你會發現,只取能得 Windows 10 1709、1803 版本安裝檔,在新的筆電 Windows 10 v1903 上,下載的安裝檔都無法使用,找了一會兒在「安裝需知」才看到:
Starting with Windows 10 October 2018 Update, RSAT is included as a set of "Features on Demand" right from Windows 10. Do not download an RSAT package from this page. Instead, just go to "Manage optional features" in Settings and click "Add a feature" to see the list of available RSAT tools. Select and install the specific RSAT tools you need. To see installation progress, click the Back button to view status on the "Manage optional features" page
原來 RSAT 工具在 Windows 10 1809 之後的安裝有所改變。文件可參考:Available Features on Demand。
當我們採用含 IIS 功能的 Windows Container 後(例如,Windows IIS、ASP.NET等),有時需要查詢或操作 IIS,未經組態的 IIS 容器並無法直接使用如 IIS 管理員等 GUI 工具來連線管理。還是可以透過內建 iisreset.exe 與 appcmd.exe 來進行查詢與管理。
某一批新 VM 主機在安裝了 Microsoft Monitoring Agent(MMA)之後,出現奇怪的現像,在 Log Analytics 裡,除了 Perf (效能計數器) 項目,其他查詢都很正常。本來方向一直在 MMA 打轉,查了許久,終於找出原因:
Get-Counter -ListSet * | Sort-Object -Property CounterSetName | Format-Table -AutoSize
Get-Counter -ListSet * | Where-Object -FilterScript {$_.CounterSetName -eq "Process" -or $_.CounterSetName -eq "Memory" -or $_.CounterSetName -eq "LogicalDisk"}
因為教學與工作上的需求,經常使用到 Northwind 資料庫,但重覆性的建立工作,實在浪費不少時間。在容器化時代,當然用容器來解決這種工作內容最合適不過了。
由於專案需求多變,有時需要自行建置客製化 Windows 基礎映像檔(Base Image)來使用,就在是在微軟官方的基礎映像檔之上去安裝軟體、設定環境等,像之前的文章:WINDOWS CONTAINER之.NET CORE找不到GDIPLUS.DLL解決方案為例,我們就把 ASP.NET Core Runtime 安裝至 Server Core 基礎映像檔,微軟官方應用程式的映像檔除非特別理由,不然通常最終都會以 Nano Server 為基礎映像檔來提供。