前段時間把阿湯博客從虛擬主機遷移到了服務(wù)器,一同遷移的還有其他兩個網(wǎng)站,開始幾天沒啥問題,但是過了幾天,網(wǎng)站就會出現(xiàn)打不開的情況。
一開始沒在意,重啟了Apache服務(wù)就正常了,但是接下來一段時間頻繁出現(xiàn)無法打開的情況,有時候兩三天,有時候四五天。
出現(xiàn)故障的時候監(jiān)聽Apache錯誤日志,發(fā)現(xiàn)大量的child pid xxx exit signal Segmentation fault (11)信息。

但是此時測試80和443端口正常,訪問PHP探針頁面也可以正常訪問,但是就是頁面無法訪問,一些css、js文件訪問報404錯誤。
網(wǎng)上查了查,有人說child pid xxx exit signal Segmentation fault (11)是因為進(jìn)程內(nèi)存泄露導(dǎo)致的,需要調(diào)整Apache參數(shù),MaxConnectionsPerChild不能設(shè)置為0 。
MaxConnectionsPerChild : 進(jìn)程生命周期內(nèi),處理的最大請求數(shù)目。達(dá)到該數(shù)目后,進(jìn)程將死掉。如果設(shè)置為0,表示沒有限制。該參數(shù)的意義在于,避免了可能存在的內(nèi)存泄露帶來的系統(tǒng)問題。
但是我的Apache此參數(shù)并不是0,我也嘗試改小一些,測試了兩天還是會出現(xiàn)無法訪問的情況。
然后網(wǎng)上又找到一些可能會導(dǎo)致此問題的原因:
1. 使用mmcache模塊在linux x86-64上有問題
2. 由于php編譯安裝過程有問題,或者apache+php安裝完成后,PHP又重新編譯安裝過,同時apache也重新編譯就會產(chǎn)生這種現(xiàn)象.建議保留httpd.conf和相關(guān)配置文件后,重新安裝一遍apache+PHP,注意先后順序,如果還是會有這個提示,請更換php版本重裝。
3. php的模塊zend_extension和extension沖突。
4. 由于使用了APC造成的,這是這類op-code緩存優(yōu)化軟件共同的問題.建議用最新版本試試(http://pecl.php.net/package/APC).一旦出現(xiàn),只能重起apache。
5. /tmp目錄文件太多,刪除后正常。
6. 配置模式為worker, 改為prefork。
7. ZendOptimizer-3.3.0 與 jdk1.7.0沖突。
8. web訪問的某些特殊文件造成的,檢查access_log可以看到,刪除文件。
9. PHP啟用了eaccelerator模塊導(dǎo)致。
10. apahce啟用了cache導(dǎo)致。
11. 配置文件模塊沖突之類的原因。
通過一條條排查,并沒有符合條件的原因。
由于故障屬于偶發(fā),排查找原因非常困難,而且此類故障原因太多。
一開始想著通過站點監(jiān)控接口回調(diào),觸發(fā)腳本重啟Apache服務(wù),但是發(fā)現(xiàn)每次故障監(jiān)控返回的都是狀態(tài)200,沒有觸發(fā)監(jiān)控。
于是就想著換nginx試試,畢竟好多年沒用過Apache,對一些Apache報錯和問題有些陌生了。
其實阿湯博客遷移到服務(wù)器的時候,就打算用nginx的,但是想著要去重寫幾個網(wǎng)站偽靜態(tài)太麻煩就放棄了,但是沒想到省了一時的麻煩,換來后面無休止的折騰。
然后花了半天時間把偽靜態(tài)規(guī)則換成nginx的,然后就是替換ssl證書,本地測試成功以后,線上進(jìn)行替換操作。
Apache偽靜態(tài)轉(zhuǎn)nginx偽靜態(tài),網(wǎng)上有很多工具,但是有些轉(zhuǎn)換工具還是有問題的,還是需要本地多測試,不要盲目在線上操作。
WordPress的nginx偽靜態(tài)規(guī)則還是比較簡單的,網(wǎng)上有兩種方案,這里貼一下我使用的WordPress的nginx偽靜態(tài)規(guī)則:
if ($http_host !~ "^m.163en.com$"){
rewrite ^(.*)$ http://m.163en.com/$1 redirect;
}
try_files $uri $uri/ /index.php?$args;
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
切換到nginx運行到現(xiàn)在已經(jīng)一周多了,一切穩(wěn)定,未出現(xiàn)過無法訪問的情況。


