除了使用阿裡雲站點監控服務以外,我們也一直在使用PHP編寫的巡檢程序定期檢查各個系列的各個站點,最近發現有一些異常報錯,主要有兩種情況:
1、SSL證書驗證不通過
會導緻程序反複重試,十一期間就不斷報錯,在網上查到是Let's Encrypt的SSL證書有些問題,雖然普通浏覽者沒有影響,但我們Linux服務器上的PHP和wget都不行,可以采取跳過SSL證書驗證的辦法來臨時解決,wget使用wget --no-check-certificate的參數來運行,而PHP程序中添加下面一段:
stream_context_set_default( [
'ssl' => [
'verify_host' => false,
'verify_peer' => false,
'verify_peer_name' => false,
],
]);
再用get_headers和file_get_contents就可以訪問https的站點了。
2、無User Agent被屏蔽
我們以前在apache htaccess中設置過無User Agent的訪問被拒絕,或者在PHP反采集程序中加同樣的判斷和措施,還有CDN中也可以設置防火牆來屏蔽。
這些天我們運行多年的巡檢程序也遇到這種情況而報錯,可以這樣設置:
$opts = [
"http" => [
"method" => "GET",
"header" => "Accept-language: en\r\n" .
"Cookie: foo=bar\r\n" .
"User-Agent: Linux W-Get Monitor2 Main.php opts\r\n"
]
];
$context = stream_context_create($opts);
$content = file_get_contents($url, false, $context);
而更簡單的辦法是這樣:
ini_set('user_agent', 'Linux W-Get Monitor2 Main.php set');
對file_get_contents和get_headers都有效。
评论