早上,訪問網站正文頁面的時候,頁面加載一部分後,自動跳轉到了聯通的域名沒法訪問頁面,http://bjdnserror1.wo.com.cn:8080/issueunziped/bj140404/self0.jsp?UserUrl=world.xxx.com,javascript
發現問題後,一開始覺得是dns,可是經過分析,頻道頁,列表頁,網站首頁都沒有問題,只有正文頁面有問題;以後進行抓包,發現頁面部份內容是能夠正常加載的,加載一部分後就自動跳轉,這時就想到有多是頁面模板被篡改,問過相關人員,早上沒有進行任何修改與代碼的提交;既然沒有提交修改,又不是dns劫持的問題,那頁面模板只有廣告和其餘業務的數據致使的,經過排查頁面上的版塊,發現一個版塊引入的ssi中包含了:php
<html> <script language=javascript type="text/javascript"> window.location.replace("http://bjdnserror1.wo.com.cn:8080?HOST=" + location.hostname + "&R=" + location.pathname + "&" + location.search.substr(location.search.indexOf("\?")+1)); </script> <noscript> <meta http-equiv="refresh" content="0;URL=http://bjdnserror1.wo.com.cn:8080"> </noscript> <head> <title>Redirect</title> </head> <body bgcolor="white" text="black"> </body> </html>
查看這部份內容, 這個就是致使頁面自動跳轉的緣由,那麼,爲何會出現這段代碼呢?詢問相關人員,是CMS機器上的一個定時任務抓取論壇熱點文章致使的,html
抓取部分代碼以下:java
$url = 'http://www.fadfadsfadsf.com/a.php';//錯誤接口地址
$content = '';
$rank_info = file_get_contents($url);
$rank_info = trim($rank_info);
if (empty($rank_info) || stristr($rank_info,"Database Error")) return false;
$rank_info = strrev(substr($rank_info, strpos($rank_info, '<')));
$rank_info = strrev(substr($rank_info, strpos($rank_info, '>')));
$rank_info = str_replace('\n', '',$rank_info);
$file = fopen("test1.txt","w");
echo fwrite($file,$rank_info);
經過測試,有多是定時任務在抓取瞬間,這個接口地址的dns解析出現問題,抓取後的內容就是上面自動調轉的代碼,當系統出現問題時,第一時間內要解決問題,趕忙讓人經過手動更新了一下抓取任務,抓取就數據正常了。json
經過這個問題,考慮到後續須要改進的幾點:服務器
1.業務與業務的內部系統間傳遞接口數據,最好採用json或xml形式,而且要包含數據獲取正常與否的狀態位;咱們的問題發生是論壇業務提供的數據接口是js形式,cms人員還得經過過濾來獲取數據,不知道之前的人員是怎麼想的。。。。運維
2.能夠在服務器上指定交互系統的ip,跳過dns解析;jsp
3.運維能夠考慮監控數據接口的調用結果,可是這個應該是個比較複雜的工程測試