シナリオは次のとおりです。1 つの EC2 マイクロ インスタンスで 2 つのサイト、1 つのワードプレス ブログ、1 つのフラスコを利用したサイトをホストします。どちらも 8080 でリッスンする nginx で提供され、80 でリッスンする varnish が nginx のプロキシとして機能します。wpsite.com のみをキャッシュする必要があり、flasksite.com のキャッシュ エンジンをスキップしたいと思います。
これは VCL です。
backend default {
.host = "127.0.0.1";
.port = "8080";
}
acl purge {
"127.0.0.1";
}
sub vcl_recv {
if (!req.http.host ~ "^(www\.)?wpsite\.com$") {
return(pass);
}
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
return(lookup);
}
if (req.http.Accept-Encoding) {
#revisit this list
if (req.url ~ "\.(gif|jpg|jpeg|swf|flv|mp3|mp4|pdf|ico|png|gz|tgz|bz2)(\?.*|)$") {
remove req.http.Accept-Encoding;
} elsif (req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
} elsif (req.http.Accept-Encoding ~ "deflate") {
set req.http.Accept-Encoding = "deflate";
} else {
remove req.http.Accept-Encoding;
}
}
if (req.url ~ "\.(gif|jpg|jpeg|swf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") {
unset req.http.cookie;
set req.url = regsub(req.url, "\?.*$", "");
}
if (req.url ~ "\?(utm_(campaign|medium|source|term)|adParams|client|cx|eid|fbid|feed|ref(id|src)?|v(er|iew))=") {
set req.url = regsub(req.url, "\?.*$", "");
}
if (req.http.cookie) {
if (req.http.cookie ~ "(wordpress_|wp-settings-)") {
return(pass);
} else {
unset req.http.cookie;
}
}
}
sub vcl_fetch {
if (req.url ~ "manager" || req.url ~ "wp-(login|admin)" || req.url ~ "preview=true" || req.url ~ "xmlrpc.php") {
return (hit_for_pass);
}
if ( (!(req.url ~ "manager" || req.url ~ "(wp-(login|admin)|login)")) || (req.request == "GET") ) {
unset beresp.http.set-cookie;
set beresp.ttl = 1h;
}
if (req.url ~ "\.(gif|jpg|jpeg|swf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") {
set beresp.ttl = 365d;
}
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
sub vcl_hit {
if (req.request == "PURGE") {
set obj.ttl = 0s;
error 200 "OK";
}
}
sub vcl_miss {
if (req.request == "PURGE") {
error 404 "Not cached";
}
}
問題: すべて正常に動作しているように見えますが: cookie-session に依存するフラスコサイト.com のログイン システムがあります: ログインするとシステムは動作しますが、ログアウトしようとすると Cookie が残ります。
これらは、ログイン/ログアウトのためのflasksite.comのビューです:
@bp.route('/logout', methods=['POST'])
def logout():
if 'username' in session:
del session['username']
return redirect(url_for('.start'))
@bp.route('/login', methods=['POST'])
def login():
if 'username' not in session:
db_user = database.get_user(request.form['username'])
if db_user:
if check_password(db_user['password'], request.form['password']):
session['username'] = request.form['username']
if 'remember_flag' in request.form:
session.permanent = True
else:
session.permanent = False
else:
pass # wrong password
else:
pass # user not in db
return redirect(url_for('.start'))
nginxとクライアントの間にワニスをドロップすると、すべて魅力的に機能します。ヒントをありがとう:)