
私の Web サーバーには、サードパーティがホストする Web サイト (blog.company.com/blog) をキャッシュする varnish インスタンスがあります。サイトの残りの部分はローカルでホストされているため、このために proxypass があり、ブラウザーがこれを当社の Web サイト (company.com/blog) の一部であるように見せかけたいと思っています。
(/etc/httpd/conf.d/proxy.conf) プロキシタイムアウト 300
# Blog
ProxyPass /blog http://localhost:8000
ProxyPassReverse /blog http://localhost:8000
そして、varnish バックエンドを blog.sugarsync.com に設定しました。
backend default {
.host = "70.40.204.127";
.port = "80";
}
ページは解決されますが、ページは基本的に blog.company.com/blog にリダイレクトされ、キャッシュにヒットすることはありません...varnishlog には、GET リクエストを受信する「pass」関数が表示されますが、これは奇妙です。カスタム バックエンドの外部で /etc/varnish/default.vcl のすべてのデフォルト動作を使用しているため、それらを渡すべきではないからです...
11 SessionOpen c 127.0.0.1 46485 0.0.0.0:8000
11 ReqStart c 127.0.0.1 46485 394102336
11 RxRequest c GET
11 RxURL c /
11 RxProtocol c HTTP/1.1
11 RxHeader c Host: localhost:8000
11 RxHeader c User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4
11 RxHeader c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
11 RxHeader c Accept-Encoding: gzip,deflate,sdch
11 RxHeader c Accept-Language: en-US,en;q=0.8
11 RxHeader c Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
11 RxHeader c Cookie: __utmx=74837904.GQgj_x3FQCSgKU8YgJ937g$30088162-10:0; __utmxx=74837904.GQgj_x3FQCSgKU8YgJ937g$30088162-10:1351630608:15552000; __utmx=32887036.GQgj_x3FQCSgKU8YgJ937g$30088162-10:0; __utmxx=32887036.GQgj_x3FQCSgKU8YgJ937g$30088162-10:1351791703:155
11 RxHeader c scns-hdr-ip: 50.76.54.11
11 RxHeader c X-Forwarded-For: 10.5.112.22
11 RxHeader c X-Forwarded-Host: www.s.company.com
11 RxHeader c X-Forwarded-Server: www.company.com
11 RxHeader c Connection: Keep-Alive
11 VCL_call c recv
11 VCL_return c pass
11 VCL_call c pass
11 VCL_return c pass
奇妙なのは、ホスト名を直接入力すると (hostname.company.com:8000 または company.com/blog)、varnish キャッシュに正しくヒットしますが、ブラウザーで URL がリダイレクトされることです。正しい URL (www.company.com/blog) への curl もキャッシュにヒットします。サブドメインも機能していないようです...これは何が起きているのでしょうか?
答え1
これが発生する理由は、デフォルトの VCL ロジックがリクエスト ヘッダーにまたは がpass
含まれるものをキャッシュすることを拒否し、リクエストに が含まれるためです。Authorization
Cookie
Cookie
if (req.http.Authorization || req.http.Cookie) {
/* Not cacheable by default */
return (pass);
}
このデフォルトの動作は、ユーザーのセッションに応じてページに異なるコンテンツが返されるサーバーがないように、十分な注意を払ったものです。この動作は で変更できますvcl_recv
。デフォルトのコピーとして実装しますが、チェックを削除しますreq.http.Cookie
。
if (req.http.Authorization) {
/* Not cacheable by default */
return (pass);
}
リダイレクト動作に関しては、30x
応答を取得してクライアント ブラウザーをリダイレクトしているようですが、それらのヒットの 1 つに関するログを提供できますか?