Web サイトのキャッシュを準備する PHP スクリプトがあります。
Nginx フロントエンドをバイパスして、Apache バックエンドからヘッダーを取得しようとしています。
次の例は(コマンドライン経由で)機能します:
curl -I -H "Host: example.com" 127.0.0.1
ただし、PHPで同じことをしようとすると、そうではありません。
$headers = array("Host: example.com");
$url = "127.0.0.1";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt ($ch, CURLOPT_HEADER, true);
curl_setopt ($ch, CURLOPT_NOBODY, true);
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers);
$ret = curl_exec ($ch);
curl_close ($ch);
echo "$ret";
これは常に、「ホスト」httpヘッダーにリストされているWebサイトではなく、Apache virtualhostファイルにリストされている最初のWebサイトを返します。
コマンドライン経由では問題なく動作するのに、php スクリプトでは動作しない理由がわかりませんか?