Drupalד高速化“
認証ユーザーキャッシュ
2
ABOUTME
Job : 小さな “CDN会社” レッドボックス
※取り扱いトラフィックは約50Gbps前後(2017年時点)
Name: 小川 かつひさ (KATSUHISA OGAWA)
Like : キャッシュ・負荷分散・WEB高速化
https://www.facebook.com/ogawaka
WEB高速化ブログ
Past : いんふら屋さん
サーバーやスイッチを設定したり色々やってるアレ
http://blog.redbox.ne.jp
3
Drupalの特徴/他のCMSとの違い
DrupalとWordpressを比較
WORDPRESS
・所謂ブログタイプで参照のみのケースが多い
・ログインユーザーは記事更新など運営管理がメイン
DRUPAL
・ユーザー権限の管理が柔軟
・ブログ運営からコンシューマーサービスまで幅が広い
4
Drupalの特徴/他のCMSとの違い
プロジェクトの複雑さと最適なプラットフォーム
出典:https://annai.co.jp/article/drupal-wordpress-and-all-the-
rest-how-to-choose-a-web-platform
5
認証ユーザーキャッシュが必須のDrupal
Drupalはログイン前提で
利用されるケースがおおい。
高速化には
認証ユーザー向けキャッシュが必須
=
6
DrupalをCDNで利用するためには
主要CDNベンダで案内している手順
1. CDNベンダ側の初期設定
2. CDNモジュール※1をDrupalに導入
3. CDNサービスのサブドメインをCDNモジュール設定画面で登録
4. Drupalのキャッシュクリア
※1. CDN Module
https://www.drupal.org/project/cdn
7
DrupalをCDNで利用するためには
Drupal CDNモジュールは指定された拡張子の
FQDNをCDNベンダのFQDNに書き換える。
または書き換えをおこなわないURLのルールを
設定できる。
Drupal CDNモジュールとは
メリット
 WEBサイトのDNS変更不要
 CDN化したいコンテンツの制御がDrupal内で完結
デメリット
 モジュールの不具合、設定ミスでサイトが全断する恐れあり
 ページキャッシュを行うには課題がある
8
CDNで
Drupalのページを
安全にキャッシュする。
9
Drupal×CDNの設定
キャッシュさせないPATH
^/status.php$"
"^/update.php"
"^/install.php"
"^/apc.php$"
"/admin"
"/admin/.*$"
"/user"
"/user/.*$"
"/users/.*$"
"/cron.php"
"^/info/.*$"
"^.*/ajax/.*$"
"^.*/ahah/.*$"
"^/system/files/.*$"
"^.*/edit.*$"
サンプル(正規表現)
課金関係のモジュールが利用しているパス
カート関連のモジュールのパス
ソーシャルログイン関連のパス
その他キャッシュさせない項目
10
Drupal×CDNの設定
キャッシュさせる設定
・特定のレスポンスヘッダを削除または無視する
Drupalの各種ページはD7/D8共に以下の様なレスポンスヘッダが付与される。
Cache-Control:no-cache, must-revalidate
Expires:Sun, 19 Nov 1978 05:00:00 GMT
※ 19 Nov 1978はDrupal創業者Driesの誕生日
CDNベンダはno-cacheが付与されている/Expiresが過去の日付の場合
キャッシュしない動作がデフォルトであることがほとんどのため必須設定。
これでキャッシュすること自体は可能だが、次のような事故が発生する。
・User1さんがログイン後WEBサイトにアクセス。
・User2さんがログイン後同じページにアクセスすると、
User1さんでキャッシュした情報が見えてしまう!!
11
外部キャッシュ(CDN)の注意点
そう、こんなふうに
CDNが情報漏洩につながる危険
12
安全に
認証ユーザーを
キャッシュさせる。
13
Drupal×CDNの設定
それには、スパイスとチューニングが必要
SPICE TUNING
14
Drupal×CDNの設定
CDNのキャッシュKEYとは?
どのような情報をもとにキャッシュをおこなうかというルール。
一般的にはURLを基準に、クエリストリングや特定のヘッダ情報などを
キャッシュKEYに指定する。
サンプルリクエスト
http://aaaaa.com/test.html
キャッシュKEY:URL
http://aaaaa.com/test.html
キャッシュKEY :URL+クエリ
http://aaaaa.com/test.html
http://aaaaa.com/test.html?1234
http://aaaaa.com/test.html?5678
キャッシュKEY :URL+Vary User-Agentヘッダ
http://aaaaa.com/test.html(Vary User-Agent:Iphone)
http://aaaaa.com/test.html(Vary User-Agent:Android)
http://aaaaa.com/test.html(Vary User-Agent:Chrome)
15
Drupal×CDNの設定(SPICE)
キャッシュKEYにCookieを含める
Cookie内に保存されているセッションキーをキャッシュKEYに含めることにより、
ユーザーごとにキャッシュを分けることができる。
キャッシュKEY :URL+Cookie
http://drupal-sample.com/test(SESS:user1xxxxx)
http://drupal-sample.com/test(SESS:user2xxxxx)
http://drupal-sample.com/test(SESS:user3xxxxx)
>http://drupal-sample.com/test
User1
User5
User2
User3 User4
5個のキャッシュに分ける5人のユーザー
16
Drupal×CDNの設定(TUNING)
Cookieのチューニング
Cookieの中には通常セッション以外にも様々な情報が格納される。
リクエストするたびに変更されるユニークな値もあるため、
そのため、セッションキーだけ取り出した後、キャッシュキーにする。
Cookie:Drupal.toolbar.collapsed=0;_ga=GA1.3.731444347.1493815250;_gid=GA1.3.1263749221.1500
647187; SESS9ca48a5e37d1sbsdsf3s1s0bses3s3sb_2Iw6B3YnZsNCswyTsy4l2kdGY_yPxRbwT4YU;
has_js=1
Cookie:SESS9ca48a5e37d1sbsdsf3s1s0bses3s3sb_2Iw6B3YnZsNCswyTsy4l2kdGY_yPxRbwT4YU;
>
これで、HIT率を低下させることなく、
安全にページキャッシュが可能。
17
Drupal×CDNの設定(TUNING)
DrupalのCoreキャッシュはOFF
Drupal7/8ともに管理画面からキャッシュ機能をOFFにしてください。
※Drupal8はDynamic CacheもOFFにする。
Drupal8のDynamic Cache無効化
以下の内容を各ファイルに追記する。
sites/default/services.yml
services:
cache.backend.null:
class: DrupalCoreCacheNullBackendFactory
sites/default/settings.php
$settings['cache']['bins']['render'] = 'cache.backend.null';
$settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null’;
参考サイト:
https://www.drupal.org/node/2598914
18
正直、Cookieのパースなんて
やってられないですよね?
ということで、面倒な設定を詰め込んだ
DRUPALCDNを作ってみた。
Rapid START CDNサービス
19
無料で開始 プリセットを用意 マルチプラットフォーム
https://cdn.tokyo
※Drupalとエッジサーバーを連携させて開発
「CDN 無料」で検索
Rapid START CDNサービス
20
Rapid STARTの特徴
 無料でSTART
 DNSを変更するだけでOK
 1秒以下の高速キャッシュ削除
 DrupalをCDN化するプリセット(実装済)
 SSL(HTTP/2)配信も可能(実装済)
 タグベースのパージAPIも提供(する予定)
 オリジンサーバーへHOSTヘッダを透過
アクティブドメイン = 243個
DEMO
21
最後に少しだけDEMO
MERCI!!
=)

CDNで高速化!Drupal認証ユーザーむけページキャッシュ設定