NGINX:對靜態內容的保持活動請求正常 - 對 php-fpm 請求的保持活動請求掛起,直到達到 keepalive_timeout
僅供參考,我發布的最初問題在這裡,不需要閱讀它,因為我最初離題很遠:
我能夠追踪它以維持生命。
請記住,當我在這個問題中談到保持活力時,我的意思是 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 或更高版本