TS-464/QTS 5.2.10:Apache 在併發請求下(本機回送可重現)回傳空白內容但 HTTP 狀態碼為 200

用來存取 NAS 的作業系統: Windows 10 Pro(也可在 NAS 本機用 curl 重現,無需客戶端) NAS 型號: TS-464 (x86_64) 韌體版本 / 建置號: QTS 5.2.10,建置 20260731(5.2.9 也出現過此問題) Web 伺服器: QTS 內建的 Apache 2.4.65,從 Web 共用資料夾提供靜態檔案

症狀

在多個 HTTP 請求同時進行時,有一部分回應會以 HTTP 200 OK 且 Content-Length: 0 並且沒有內文的狀態回傳。狀態碼是 200,所以只檢查狀態碼的話都會以為成功。受影響的檔案是一般的靜態資產——CSS 與 JS。在瀏覽器中,這會表現為頁面載入時缺少樣式或腳本,但控制台上沒有任何錯誤訊息,因為空的 200 並不算錯誤。

連續請求(非並行)都不會失敗。必須同時有約 4 個以上請求在進行時才會出現問題。

重現方式(不需瀏覽器,也不經外部網路)

請在 NAS 本地以 SSH 執行下列指令,僅經由 loopback 介面存取靜態檔案:

cd /tmp; rm -f p_*.txt

F=$(find /share/Web/<your_site> -name '*.css' -o -name '*.js' | head -40)

for r in 1 2 3; do

for f in $F; do u=${f#/share/Web/}

(curl -sk -o /dev/null --http1.1 -w "%{http_code} %{size_download}

" "https://127.0.0.1:8443/$u" >> p_$r.txt) &

done

wait

done

echo "total=$(cat p_*.txt | wc -l) empty=$(awk '$1==200 && $2==0' p_*.txt | wc -l)"

重點有兩點:必須平行執行請求(靠 & 與 wait),而且要統計的是主體大小,而非狀態碼。

測量結果

日期 變體 請求數 空回應(200 + 0 bytes)
2026/9/2 並行, HTTP/1.1 120 7-13,視每次而異
2026/9/14 並行, HTTP/1.1 120 10
2026/9/14 並行, HTTP/1.1 40 10
2026/9/22 並行, gzip / 無 gzip 120 / 120 7 / 13
2026/10/12 並行, gzip / 無 gzip 120 / 120 9 / 12
任一天 連續 40 0

所以同時併發請求時,根據執行結果約佔 3% 到 25%。

已由測量排除的可能因素

  • ModSecurity(模組確實已關閉—無改變)
  • EnableMMAP Off / EnableSendfile Off(無改變)
  • mod_deflate / gzip(有無均會發生)
  • HTTP/2 與 HTTP/1.1(兩者都會發生)
  • php-fpm(純靜態檔案也會)
  • QTS 從 5.2.9 升至 5.2.10(問題仍在)
  • NAS 重新開機(問題仍在)
  • 網路:在本機 loopback 也可重現

Apache 日誌

啟用 LogLevel debug 的錯誤日誌,針對失敗請求完全沒任何紀錄——所有連線記錄都顯示為標準關閉。每次請求倒是都有出現一條無關訊息:ModSecurity requires mod_unique_id to be installed。

注意:/etc/init.d/Qthttpd.sh 每次啟動 Apache 時都會強制加上 ErrorLog /dev/null 及 LogLevel crit,除非 QWEB CustomLog 為 TRUE,所以重啟時可能會悄悄丟棄你的日誌設定。對 Apache pid 使用溫和的 kill -USR1 可以套用配置而不會遇到上述問題。

詢問其他 TS-464 用戶

你能用 QTS 5.2.10 在你的機器上重現此狀況嗎?上述腳本約一分鐘即可,只會讀取檔案。我想知道問題是出在特定機型,特定韌體還是更為普遍。

自 9 月 2 日(Q-202609-51425)起已經有開支援單。到目前為止,我還沒得到廠商實驗室是否能重現該問題這唯一一個問題的回覆。