Nginx

NGINX:對靜態內容的保持活動請求正常 - 對 php-fpm 請求的保持活動請求掛起,直到達到 keepalive_timeout

  • November 20, 2020

僅供參考,我發布的最初問題在這裡,不需要閱讀它,因為我最初離題很遠:

https://serverfault.com/questions/427296/nginx-php-fpm-strange-issue-when-trying-to-display-images-via-php-gd-readf

我能夠追踪它以維持生命。

請記住,當我在這個問題中談到保持活力時,我的意思是 USER <-> NGINX 保持活力。不是NGINX <-> BACKEND(在這種情況下為 php-fpm)。

場景三是問題場景,我剛剛包括了一和二,以明確我已經完成了所有必需的測試。

所以,這正是發生的事情:

方案一$$ keep alive enabled $$:

A) 請求靜態內容

$$ non fastcgi based requerst, simple file system access $$被製成 B) Keep alives開啟

C) 內容髮送沒有問題,100% 的時間

方案二$$ keep alive disabled $$:

A) 請求基於動態 php-fpm 的內容

B)保持活力已關閉

C) 內容髮送沒有問題,100% 的時間

場景三$$ keep alives enabled $$:

A) 請求基於動態 php-fpm 的內容

B) Keep alives開啟

C) 內容已發送,但瀏覽器將掛在“載入狀態”,直到達到 keepalive_timeout。這種狀態在瀏覽器中看起來不同。例如,chrome 會顯示內容,但會在頂部瀏覽器中“旋轉”。達到 keepalive_timeout 後,旋轉停止並且請求在調試器中顯示為紅色,即使內容實際上顯示正常。在 IE 中,頁面保持空白,直到達到保持活動超時,然後顯示內容。查看 IE 開發人員工具可以看到內容在“藍色”中需要“keepalive_timeout”秒,在 IE 開發人員工具案例中是“接收”。

完全被難住了,嘗試將 conf 恢復為最基本的形式,但這仍然會發生。

總結一下,在啟用保持活動的情況下提供基於 php-fpm 的結果時,似乎存在某種與網路相關的問題(tcp/ip 堆棧?)。

有任何想法嗎?

這裡可能有一兩件事有問題。

https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_keep_conn

syntax:     fastcgi_keep_conn on | off;
default:    

fastcgi_keep_conn off;

context:    http, server, location

預設情況下,FastCGI 伺服器將在發送響應後立即關閉連接。當設置為 on 時,nginx 將指示 FastCGI 伺服器保持連接打開。這對於保持連接到 FastCGI 伺服器的功能來說尤其必要。

或者

https://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive

upstream default {
 server 10.0.0.1:80;
 keepalive 1024 single;
}

為上游啟用保持連接。

Num 指定之前保持打開的最大連接數,如果達到最大值,它將關閉最近最少使用的連接。

Single 將所有內容都視為單個主機。使用此標誌,與不同後端的連接被視為平等。

兩者都適用於 Nginx 1.1.4 或更高版本

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