一個以瀏覽器為基礎的 nginx 設定產生器在 Windows 上與在其他地方運作方式相同,因為產生器本身是在瀏覽器內執行,只會輸出一段文字區塊供你放入真正的 nginx 安裝中。Windows 特有的挑戰不在於產生器,而是 Windows 路徑(如 C:\nginx\html)與產生器要求以及 nginx 本身剖析的 POSIX 風格絕對路徑之間的落差。對於靜態網站,你輸入一個精確的網域、nginx 會看到的文件根目錄(例如 /nginx/html 而非 C:\nginx\html)、介於 1 到 365 天的快取持續時間,以及在靜態 404 與 SPA 回退之間的明確選擇。輸出會保留在你的機器上,產生器會拒絕具有注入形式的輸入,而工具背後八個官方文件測試案例涵蓋了兩種 listen 形式、精確的 server_name、root、靜態與 SPA 的 try_files 回退、資產到期與 gzip 類型。在你複製該區塊之後,請備份 nginx.conf,將片段放在正確的內容中,從 nginx 目錄執行 nginx -t,並在重新載入之前測試具代表性的請求。本文將逐步介紹該工作流程,並提供關於路徑、命令提示字元以及官方 nginx for Windows 版本所使用部署路徑的 Windows 專屬說明,使得在 Windows 上的 nginx 設定產生器能夠產生你實際可重新載入而不會發生意外的區塊。

nginx config generator on windows
Windows 上的 Nginx 設定產生器:路徑與測試

為何瀏覽器產生器適合 Windows 工作流程

對許多 Windows 使用者而言 nginx 是次要考量,因為團隊以 Windows 進行開發、以 Linux 進行生產環境,或由 Windows 代管小型預備網站。以瀏覽器為基礎的產生器消除了為了起草伺服器區塊而維護 Linux 虛擬機的需求。Nginx 設定產生器在本機執行,要求輸入一個網域、一個 POSIX 絕對文件根目錄、一個快取持續時間,以及可選的 gzip 或 SPA 選擇,並拒絕任何看起來像指令注入的輸入。由於產生器從不聲稱會自行產生 TLS、PHP、反向代理、速率限制、安全標頭或上傳規則,操作者對寫入磁碟的每個指令都保有控制權。Windows 端接著簡化為三個問題:nginx 將讀取哪個目錄、作用中的 nginx.conf 在哪裡,以及服務將如何啟動或重新載入。根據部署證據而非產生器來回答這些問題,所產生的區塊就會成為較大的、已知 nginx 安裝中一個經過檢視的小片段,而不是黑盒子。此立場符合工具對其自身輸出的描述:一個靜態網站片段,而不是適用於所有應用程式的生產基準。

為 Nginx 轉換的 Windows 路徑

Nginx 將路徑剖析為 POSIX 路徑,即使在 Windows 上也是如此。官方的 nginx for Windows 版本會將磁碟機代號對應到前置斜線,因此像 C:\nginx\html 的 Windows 目錄會被 nginx 視為 /nginx/html。Nginx 設定產生器要求使用由有限安全路徑字元組成的絕對 POSIX 路徑,並拒絕分號、大括號、變數、空白以及類似 shell 的語法,這代表含有反斜線與冒號的原始 Windows 路徑無法通過。在開啟產生器之前,請先決定你目標的 nginx 安裝,並據此轉換目錄:

  • 位於 C:\nginx 的原生 nginx for Windows:輸入 /nginx/html 或你選擇的子目錄。
  • 位於自訂位置的 nginx,例如 C:\Tools\nginx-1.27\html:輸入 nginx 端對應的形式,不含磁碟機代號或反斜線,例如 /Tools/nginx-1.27/html。
  • 在 WSL 內執行的 nginx:輸入 Linux 路徑,例如 /var/www/html,因為這才是 nginx 實際看到的內容。
  • 位於反向代理或 CDN 後方的 nginx:產生器仍然預期的是 nginx 本身提供服務的路徑,而不是上游來源路徑。

有兩個欄位接受路徑形式的輸入:文件根目錄,以及以整數表示的快取持續時間。產生器背後的負面測試會拒絕帶有通訊協定配置的網域、具有注入形式的根目錄,以及超出 1 到 365 天契約的持續時間,因此任何不是乾淨絕對路徑的內容在表單上就會被拒絕。這是刻意的設計;nginx 核心模組文件列出了你即將組合的指令,以及每個指令所接受的精確路徑形式。

在 Windows 上產生、檢視並放置該區塊

操作順序比點擊次數更重要,因為每個後續步驟都依賴前一個步驟的正確性。

  1. 在 Windows 機器上的任何現代瀏覽器中開啟 Nginx 設定產生器。請勿將你實際運行的 nginx.conf 貼到表單中;產生器只會輸出一個片段,而不是完整設定。
  2. 輸入一個精確的網域,不帶通訊協定配置、不帶萬用字元、不帶 www 別名,也不帶正則表達式。產生器會選取單一 server_name,因為多個名稱會影響虛擬主機路由與憑證涵蓋範圍,必須明確設計。
  3. 以 POSIX 形式輸入文件根目錄,如前一節所述。請確認該路徑在目標 nginx 主機上存在,並具有正確的擁有權與讀取權限,因為瀏覽器無法檢查這些事實。
  4. 為涵蓋 CSS、JavaScript、常見圖片、圖示與 WOFF2 字型的有限資產位置,選擇介於 1 到 365 天的快取持續時間。如果你的資產帶有版本或指紋字串,較長的持續時間是安全的;否則過時檔案可能比部署活得久。
  5. 謹慎決定使用靜態 404 或 SPA 回退。僅在客戶端路由應接收未知應用程式路徑時回傳外殼首頁;對於一般內容網站,真正的 404 能隱藏較少的失效 URL。
  6. 若你的受眾受益於壓縮,且你的回應並未洩漏機密資料,請切換可選的 gzip。HTML 由 nginx 預設 gzip 行為處理,不需要出現在 gzip_types 清單中。
  7. 產生該區塊,並依據你 nginx 版本中實際安裝的模組檢視每一個指令。移除任何依賴於你尚未載入模組的內容。
  8. 在進行任何變更之前,備份實際運行的 nginx.conf,並記錄作用中的 include 鏈。
  9. 將片段放在正確的內容中,通常是 http{} 區塊內的一個檔案,可透過 include sites-enabled/*.conf; 或直接放在主要設定中。
  10. 從 nginx 安裝目錄執行 nginx -t,以根據完整設定驗證語法與參考。
  11. 使用 curl 或瀏覽器測試具代表性的路徑(根目錄、深層靜態資產、缺失路徑、若啟用則為 SPA 外殼),並檢查回應代碼與標頭。
  12. 使用 nginx -s reload 重新載入,而非突然停止服務,並保留一個復原 shell 以便在新區塊需要還原時使用。

執行 nginx -t 並測試具代表性的請求

Windows 上的 nginx -t 步驟與 Linux 完全相同:它會剖析每個包含的檔案、解析參考,並回報發現的第一個語法或語意錯誤。從 nginx 安裝目錄執行可避免路徑混淆;如果你從其他地方啟動,請傳遞 -c conf\nginx.conf 或通往作用中設定的絕對路徑。測試成功僅代表剖析器滿意,僅此而已。它並不會確認 nginx worker 程序能夠讀取文件根目錄、確認 DNS 將網域解析到此主機、確認憑證鏈正確,或確認你的 SPA 確實會在深層連結時回傳外殼。在 nginx -t 通過後,使用同一台機器上的 curl 測試具代表性的請求:

  • 裸網域:預期為 200 以及預期的 Content-Type。
  • 已知的靜態資產:預期為 200、正確的 Cache-Control 與 Expires 值,以及啟用時的正確 gzip 標頭。
  • 不存在的路徑:靜態網站預期為 404,若啟用 SPA 回退則預期為 200 並回傳 SPA 外殼。
  • 透過 HTTPS 對網域的請求:不在本產生器的範圍內,因此請透過你的代管平台或經過檢視的程序進行測試。

如果 nginx -t 失敗,請勿重新載入。修正剖析器錯誤並重新測試。如果重新載入導致請求失敗,請還原備份、檢查 nginx 目錄內 logs\error.log 下的錯誤記錄,並反覆修正。當新區塊通過語法檢查時,請遵循在舊有 worker 繼續提供服務的同時讓新 worker 暖機的重新載入程序。永久性的快取與路由錯誤即使在 nginx 維持上線時仍會影響訪客,因此請將備份與 include 鏈筆記保持在手邊。

在 Windows 上更為關鍵的限制

由於周邊生態系統較不標準化,產生器的多項限制在 Windows 上具有額外份量。TLS 是刻意排除的:憑證路徑、續期工具、支援的通訊協定、重新導向行為、代理或 CDN 拓樸,以及 HSTS 政策都取決於特定部署,因此產生器拒絕自行產生這些內容。透過代管平台或經過檢視的程序設定 HTTPS,然後分別測試 HTTP 至 HTTPS 的行為,是支援的立場。PHP、FastCGI、反向代理、WebSockets、上傳、驗證、速率限制、自訂錯誤、MIME 包含路徑、記錄與安全標頭同樣在範圍之外;僅在實際架構需要時新增它們,並參閱各模組的官方文件。Windows 專屬的服務管理(透過 sc.exe 將 nginx 註冊為服務,或使用 nssm 等監督程式包裝它)同樣在產生器之外。將服務註冊視為獨立檢視、透過經過測試的指令碼執行,並確認服務在重新開機後能夠乾淨啟動。在 Windows 上,壓縮還有一項額外注意事項:預先壓縮的 .gz 資產需要與執行階段 gzip 不同的設定,當回應洩漏機密資料時也會有側通道方面的疑慮。

快速參考:nginx -t 在 Windows 上涵蓋了什麼

一個簡短的表格有助於釐清語法檢查實際證明了什麼,以及在 Windows 主機上仍有什麼需要人工驗證。

檢查項目nginx -t 驗證的內容仍需手動驗證的內容
指令語法是無
參考存在性(包含的檔案、區塊中的憑證路徑)是這些路徑的檔案系統權限
區塊邊界(沒有重複的 server_name 與 listen 配對)是虛擬主機路由互動
模組指令可被辨識是,對照已安裝的模組每個模組的生產行為
檔案擁有權與讀取權限否每個靜態資產路徑都需要
所列網域的 DNS 解析否在測試實際回應之前需要
實際 HTTP 回應(代碼、標頭、gzip)否在宣告重新載入安全之前需要
TLS、重新導向、憑證鏈否超出範圍;另行設定