NGINX 基礎入門(Windows 版)

NGINX 基礎入門(Windows 版)

當我們啟用 nginx.exe 之後,需要透過 -s signal 來與 nginx.exe 溝通。

nginx.exe -s signal

signal 值可以是:

  • stop: fast shutdown
  • quit: graceful shutdown
  • reload:reloading the configuration file
  • reopen:reopening the log files

nginx.conf 組態

nginx.conf 是整個 NGINX 核心,管理者透過 nginx.conf 來調整 NGINX 運作行為。

在測試階段,最常用的是 nginx.exe -s reload 來重新載入 nginx.conf。

nginx.conf 最基本組成語法:

<section> {
    <directive> <parameters>;
}

注意,每一行指令都需要由分號(;)結束。例如:events 設置:

events {
    worker_connections  1024;
}

離線下載與安裝 Docker Enterprise Edition 任意版本

離線下載與安裝 Docker Enterprise Edition 任意版本

一般而言,要安裝 Docker Enterprise Edition (以下稱 Docker EE) (或 Preview) 版本都只需要執行二行 PowerShell 指令,例如:

安裝 Docker EE 1

Install-Module DockerMsftProvider -Force
Install-Package Docker -ProviderName DockerMsftProvider -Force

安裝 Docker EE Preview:

Install-Module DockerProvider
Install-Package Docker -ProviderName DockerProvider -RequiredVersion preview

看似簡單無比的任務,搞得我就搞得我一個頭二個大。原本以為 Install-Module 加上 -Proxy 參數就能解決的問題,但不斷出現的紅字錯誤訊息,只有灰頭土臉可以形容。請管理網路同事幫忙,得到一個壞消息,這個 Install-Module 指令就算加了 -Proxy 結果還是往 Firewall 走,也有試著用 netsh 改更底層 Proxy 設定,但依然無用。動 Firewall 事態不小,非到不得以,實在不想走這一條。

使用 PowerShell 安裝、更新與刪除 Docker Enterprise Edition (含Preview)

使用 PowerShell 安裝、更新與刪除 Docker Enterprise Edition (含Preview)

在 Windows Server Core 1709 測試過程,經常需要安裝、更新或刪除 Docker Enterprise Edition 的動作。因為文件分散在 Docker Docs 與 Microsoft Docs ,整理為以下筆記,方便自己查詢。你能發現,使用 PowerShell 的安裝與更新非常簡單,刪除步驟比較多,你能從上而下跟著筆記把 Docker 給刪除,在重新安裝起來。

ASP.NET Web API GZip/Deflat 資料遺失迷航記

ASP.NET Web API GZip/Deflat 資料遺失迷航記

前情提要:參考(1)(2),之前測試發現 ASP.NET Web API 有個查詢資料量不小(1.92 MB),並且會有同等級的上傳行為,在 ASP.NET Web API 加入 GZIP/Deflate (解)壓縮來改善效能,資料由 1.92 MB → 50 KB 壓縮率約 40 倍,這是用一點 CPU 來改善效能的好範例。

同事回報,在測試區當資料量提升至 3.3 MB(3338506 bytes) 後,程式有機會(隨機)出錯(Exception)。

先來看 HTTP POST 流程:

RestSharp (RawData: Over 3.3 MB) → GZIP → GZIP ByteArray (79515 bytes) → HTTP POST → ASP.NET Web API

這是個 VSTO 的 Excel 應用程式,在讀取 Web API 資料之後,原封不同進行上傳(HTTP POST)動作,由側錄取得離線 RawData 約 3.3 MB,經過 GZIP 壓縮後得到約 78 KB 的 Byte Array 資料,最後使用參考(2)程式碼送出:

request.AddParameter("application/json", content.ToArray(), ParameterType.RequestBody);
檔案大小

接收流程:

ASP.NET Web API → DecompressionHandler → RawData → Web API life cycle

Web API 收到請求後安排一個 Message Handler 進行解壓縮後取得 RawData 之後,按 Web API 生命流程往下進行。

程式穩定運作,經過許多分析與測試後,在終於在 Web API 側錄到錯誤發生時的資訊:

lose data

在 DecompressionHandler 取得的 GZIP ByteArray 大小為 77889,很明顯小於原始的 79515,把解壓縮的 RawData 資料 Dump 出來後確實資料短少被截斷了,造成後續 Web API 在進行 ModelBinding 時的不正常 Exception。

NGINX Proxy 與 Windows Authentication 整合

NGINX Proxy 與 Windows Authentication 整合

最近在整合 NGINXReverse Proxy 時碰到一些 Windows Authentication 整合的問題,花費不少時間,特此筆記之。

一般的 Web App 在 NGINX Reverse Proxy 作用下都能正常運作,但內部網站有多許使用 Windows Authentication 功能來進行 SSO,例如,在 ASP.NET MVC 或 ASP.NET Core 的 View Page,只需透過一行 @User.Identity.Name 即可觸發瀏覽器進行身分驗證功能,在網域運作環境下,是不可多得好物。當然,你找網路可以找到許多教你設 proxy_set_header 的文章或討論: