問題描述php
考慮到在山東移動機房租賃的物理服務器的存在單點,並時不時出現故障,致使業務中止,所以決定從物理服務器把某個老牌論壇遷移到可用性極高的proxmox超融合私有云平臺。昨天夜裏,兄弟們忙乎了一整夜,非常辛苦(我在11點對那些壞掉的文件系統進行修復,用screen仍在那裏,本身睡覺去了)。html
上午睡了個懶覺,還沒清醒過來,有電話、qq消息過來了,說論壇頁面能打開,詳情頁也沒問題,但不能簽到、發帖、發附件等。nginx
催得厲害,趕忙進行處理。數據庫
運行環境後端
主要包括負載均衡及超融合私有云proxmox。負載均衡負責用戶轉發,使用的是公網ip;超融合私有云proxmox使用的是四個節點的物理服務器,運行30幾個虛擬機。瀏覽器
域名解析到負載均衡的vip,haproxy負責把請求轉發到proxmox上的指定的虛擬機。因爲論壇容量不是很大(400G左右),就直接把論壇程序、附件及數據庫部署在同一個虛擬機上(其它的應用,程序與數據庫是分離的)。bash
基本思路服務器
超融合私有云平臺proxmox上的其它虛擬機及應用都是正常狀態,所以能夠排除底層架構的問題。架構
另外兩個大的排查點就是負載均衡及論壇虛擬機自己。其餘兄弟懷疑是負載均衡配置的問題,還發來了相關操做信息。負載均衡
我一直強調,必定要先從後端真實提供服務的系統進行排查,真實服務提供者有問題,排查負載均衡有什麼用處呢?
問題定位
登陸系統,查看論壇的配置,主要是nginx及php。論壇頁面能夠打開,能夠初步判定php沒什麼問題。
接下來,打開nginx配置看看,主配置文件有以下幾行包含項:
include vhosts/default.conf; include vhosts/bbs.formyz.net.conf; include vhosts/file.formyz.net.conf; include vhosts/net.formyz.net.conf;
include vhosts/default.conf; include vhosts/bbs.formyz.net.conf; include vhosts/file.formyz.net.conf; include vhosts/net.formyz.net.conf; |
對nginx進行語法檢查,未發現異常。老辦法,查nginx錯誤日誌,很快有以下發現:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream |
心中有底了,必定是哪一個包含文件配置上有問題。分別對這三個配置文件進行備份,而後挨個打開,發先有兩個配置文件裏,嵌套了包含項以下:
root /data/html/bbs.formyz.net; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf;
root /data/html/bbs.formyz.net; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; |
而另一個配置文件裏,嵌套的項確是這樣的:
root /data/html/bbs.formyz.net; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params;
root /data/html/bbs.formyz.net; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; |
再比較文件fastcgi.conf與文件fastcgi_params,不一樣之處以下:
Fastcgi.conf |
fastcgi_params |
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; |
fastcgi_param SCRIPT_NAME $fastcgi_script_name; |
把不一致的嵌套包含,都改爲include fastcgi.conf,重啓nginx。綁定服務器的主機名及ip到本地的hosts文件,瀏覽器訪問論壇,測試簽到、發帖等,一切恢復正常!