以下のVCLスニペットを利用することで設定可能です。
それぞれ任意の「名前」を登録のうえ、1つずつ設定してください。
注意事項)
■配置場所:最上部...定義
table customer_keys {
"Basic am9lOjQzNEAvMzkyIzgyPzk2": "joe",
"Basic bWlrZTo4MjM0MzNzWjQ0SDZlNw==": "mike"
}
■配置場所:指定(recv)...判断処理
if(! table.lookup(customer_keys, req.http.Authorization) ) {
error 401 "Restricted";
}
■配置場所:指定(error)...error処理
if (obj.status == 401) {
set obj.http.Content-Type = "text/html; charset=utf-8";
set obj.http.WWW-Authenticate = "Basic realm=Secured";
synthetic {"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<HEAD>
<TITLE>Error</TITLE>
<META HTTP-EQUIV='Content-Type' CONTENT='text/html;'> </HEAD>
<BODY><H1>401 Unauthorized (varnish)</H1></BODY> </HTML> "};
return (deliver);
} # End custom 401 code
なお、オリジンサーバー側で Basic認証を設定している場合、Basic認証が解除された状態が CDN にキャッシュされると、認証なしでアクセスできてしまう恐れがあります。
CDN でBasic認証を利用する場合は、オリジンサーバーではなく、CDN 側で設定を行ってください。