Nginx

Nginx和fcgiwrap,增量輸出問題

  • May 8, 2019

當我在 Apache 下執行 cgi 腳本時,任何輸出都會快速發送到客戶端。但是,當我使用 fcgiwrap 在 nginx 下執行它時,在腳本完成或產生大量輸出之前,似乎什麼都沒有發送到客戶端。特別是在使用 git-http-backend 時,這會導致複製大型儲存庫時網關超時(並且缺少複製較小儲存庫的進度資訊)。

可以使用以下腳本看到此行為。

#!/bin/bash
echo "Content-type: text/html"
echo
while :
do
      echo this is a test.
      sleep 5
done

在 apache 下,客戶端將每 5 秒獲取一些數據。

在帶有 fcgiwrap 的 nginx 下,我沒有得到任何數據並且網關超時。

nginx 和 fcgiwrap 是來自 Debian Jessie 的軟體包。版本 1.1.0-5 和 1.6.2-5+deb8u4

所以問題

  1. 有誰知道這是造成這種行為的原因?nginx本身?fcgiwrap?兩個都?
  2. 是否可以通過配置修復?
  3. 如果是 fcgiwrap 問題,是否有其他可用的 cgi 包裝器不會出現問題?

好的,想通了。似乎 nginx 和 fcgiwrap 都有不受歡迎的緩衝。對於 nginx,它似乎可以通過配置禁用,而 fcgiwrap 需要更新檔。

我在http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=863478發布了 fcgiwrap 的 debdiff,這增加了一個新選項 NO_BUFFERING

(更新:Debian 現在已經應用了上述更新檔,因此如果您正在執行 Debian Buster 或更高版本,則不需要自己應用它)。

然後 nginx 配置需要更改以將 NO_BUFFERING 選項傳遞給 fcgiwrap 並禁用 nginx 內部的緩衝。

為此,我在“include fastcgi_params;”之前和之後添加了一些設置。線。

   #note: NO_BUFFERING relies on a patched fcgiwrap.
   fastcgi_param NO_BUFFERING 1;
   include fastcgi_params;
   gzip off;
   fastcgi_buffering off;

引用自:https://serverfault.com/questions/852564