PHP 為 <1% 的使用者提供空白頁面
我們最近將我們的站點遷移到 varnish 後面的負載平衡 apache 集群。從那時起,一小部分使用者報告他們無法查看任何頁面。我已經把這個問題縮小了很多。這個問題在搬遷之前不存在,舊的基礎設施是一個大盒子。
我們在 Rackspace Cloud 上執行 8 個在 varnish 3.0 後面的 apache2 實例,所有這些實例都使用 Rackspace Cloud 負載平衡器(Zeus)和 2 個 mysql 實例進行負載平衡,總共 10 台伺服器,全部是 linux。
使用者可以查看靜態 html 文件。使用者可以查看靜態資產,例如圖像。使用者無法查看任何 php 文件,即使是僅包含 phpinfo() 的簡單文件;當負載均衡器從圖片中取出時,使用者無法查看任何 php 文件。
除了訪問日誌之外,apache 日誌沒有顯示任何值得注意的內容。PHP錯誤報告設置為記錄,不顯示,雖然我設置為顯示一小會,使用者仍然得到一個沒有錯誤的空白頁面。Apache/Varnish/PHP 錯誤日誌沒有顯示任何值得注意的內容。
伺服器是:
- Ubuntu Maverick 10.10
- Apache 2.2.16-1ubuntu3.1 (mpm-worker)
- PHP 5.3.3-1ubuntu9.5(用於 fcgi)
- PHP APC 正在使用中
- 應用程序在程式碼點火器上
- Varnish 是 2.1.3,現在是 3.0.0 - 兩個版本都存在問題
- MySQL 是 master-master 設置中的數據庫後端,但由於客戶端訪問問題,文件僅包含 phpinfo(); 我確信數據庫不是問題。
部分配置截圖:
- PHP FCGI - http://pastebin.com/6cepWbxp
- Apache 虛擬主機 - http://pastebin.com/FfxhYwSD
- 清漆 VCL - http://pastebin.com/tAcuyfLR
- 正在執行的所有 apache 模組的列表 - http://pastebin.com/absHpXm5
我可以提供進一步調試所需的任何/所有日誌,但對於遇到此問題的使用者而言,其中沒有任何值得注意的地方,典型的來自 apache 的訪問,沒有來自 php.ini 的錯誤。
我有一種感覺,它可能與 php 會話儲存有關,儘管我無法確認這一點。
非常感謝您對問題的任何見解。最後重申一次,這個問題只影響極少數使用者。5-10 已經就這個問題聯繫了我們,但我認為這個數字比那些沒有費心報告這個問題的人要多。與我們聯繫的這 5-10 位使用者遍布各個大洲/國家/ISP。
原來這是一個問題,由於權限問題,PHP 無法登錄到指定的日誌文件,並且錯誤顯示被禁用。
因此,PHP 錯誤未顯示或無法記錄 - 但空白頁面的根本原因是由於一個奇怪的 PHP 致命錯誤。
也許這會對你有所幫助:你有 KeepAlive 開始嗎?
我們在使用 mpm-itk 的 varnish 中遇到了同樣的問題,問題是,當使用不同的 vhost 訪問 mpm-itk 時,實際的 keep-alive 會話是,他只是終止了連接。然後,每個普通瀏覽器都會嘗試重新連接,但 varnish 不在預設配置中。刪除 KeepAlive 後不會發生這種行為,因此它解決了這個問題。
我知道,您沒有使用 mpm-itk,但也許值得一試。
另一個想法:您可以繞過清漆訪問該站點並嘗試強制空白頁面嗎?所以你可能會發現清漆是否是問題所在。