LoginSignup
3
3

More than 3 years have passed since last update.

ShinobiLayer: SoftLayerでCNAMEを使ってCDNアクセスする(動作原理編)

Last updated at Posted at 2015-02-22

はじめに

ShinobiLayer: SoftLayerでCNAMEを使ってCDNアクセスする(設定編)
http://qiita.com/testnin2/items/af9848517477b3c45a4e
の解説編(?)です。設定編の記事を書く際によく分からなかったCDNの動作原理について、色々調査・検証した結果をまとめた感じの内容になります。

設定編におけるまとめと疑問点

前回は以下のように設定することで、

  • Customer Portalの設定
    CDN02.jpg
  • DNSの設定
    CDN_DNS_new.jpg

以下の4つのURLにアクセスできるようになりました。

a) http://origin.mysl01.com/cdn/images/ninja.png
b) http://xxxxx.http.cdn.softlayer.net/80xxxxx/origin.mysl01.com/cdn/images/ninja.png
c) http://wpc.xxxxx.edgecastcdn.net/80xxxxx/origin.mysl01.com/cdn/images/ninja.png
d) http://cdn.mysl01.com/images/ninja.png

cdn.mysl01.comのCNAMEとしてwpc.xxxxx.edgecastcdn.netを設定しているのであれば、
e) http://wpc.xxxxx.edgecastcdn.net/images/ninja.png
でもアクセスできそうに思えるが、このURLではアクセスできません。何故でしょうか?

EdgeCast CDNの裏側

以下のようにCustomer Portalで設定した場合は、EdgeCast側でも幾つか設定が追加されているようです。
CDN02.jpg

  1. Originサーバー(origin.mysl01.com)のキャッシュデータは、EdgeCast ServerのDocument Root配下の/80xxxxx/origin.mysl01.com/に配置される。よって、今回のケースだと、http://wpc.xxxxx.edgecastcdn.net /80xxxxx/origin.mysl01.com でアクセスできるようになる。

  2. HTTPリクエストのHostヘッダにcdn.mysl01.com(Edge CNAME) が入っていた時のみ、Origin Base URLで設定したDirectory配下(今回のケースだと/80xxxxx/origin.mysl01.com/cdn)からの相対パスになる。

つまり、

というOrigin Serverのキャッシュデータは、EdgeCastに配置された場合

という風にアクセスできるということです。この挙動は、Apacheになじみのある方であれば、以下のようなVirtual Hostの設定みたいなものがSoftLayerのControl Panelで設定した際にEdgeCast CDNで構成されると考えると分かりやすいと思います(EdgeCastはApacheで動いていないと思いますし、実際にどういう実装をしているのかは知らないので、あくまでイメージだと考えてください)。

****<Cacheされる場所>****
/www/docs/80xxxxx/origin.mysl01.com/cdn/images/ninja.png

****<httpd.conf>****
#通常時アクセスはこのディレクトリがベース
DocumentRoot /www/docs

#HTTPリクエストのHostヘッダがcdn.mysl01.comの時は以下を利用する。
<VirtualHost *:80>
ServerName cdn.mysl01.com
DocumentRoot /www/docs/80xxxxx/origin.mysl01.com/cdn
</VirtualHost>

Hostヘッダを変更して色々試してみる

以下はHTTPリクエストのHostヘッダが、リクエストURLのホスト名と同じになるのでOrigin Base URLで設定した相対パスは使われずにNot Foundになります。絶対パスでのアクセスが必要です。

# curl -I http://wpc.xxxxx.edgecastcdn.net/images/ninja.png
HTTP/1.1 404 Not Found
Content-Type: text/html
Date: Sun, 22 Feb 2015 00:19:34 GMT
Server: ECAcc (sin/ECF4)
Content-Length: 345

# curl -I http://wpc.xxxxx.edgecastcdn.net/80xxxxx/origin.mysl01.com/cdn/images/ninja.png
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: image/png
Date: Sun, 22 Feb 2015 08:42:59 GMT
Etag: "11214d-52cb-50f5a3ee19e00"
Last-Modified: Wed, 18 Feb 2015 10:26:00 GMT
Server: ECAcc (sin/EC3E)
X-Cache: HIT
Content-Length: 21195

# curl -I http://xxxxx.http.cdn.softlayer.net/images/ninja.png
HTTP/1.1 404 Not Found
Content-Type: text/html
Date: Sun, 22 Feb 2015 00:18:39 GMT
Server: ECAcc (sin/ECF4)
Content-Length: 345

# curl -I http://xxxxx.http.cdn.softlayer.net/80xxxxx/origin.mysl01.com/cdn/images/ninja.png
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: image/png
Date: Sun, 22 Feb 2015 08:43:49 GMT
Etag: "11214d-52cb-50f5a3ee19e00"
Last-Modified: Wed, 18 Feb 2015 10:26:00 GMT
Server: ECAcc (sin/EC3E)
X-Cache: HIT
Content-Length: 21195

以下はHTTPリクエストのHostヘッダとして明示的にcdn.mysl01.comを指定したケースです。こちらはうまくOrigin Base URLからの相対パスを使ってアクセスされます。

# curl -I -H "Host: cdn.mysl01.com" http://wpc.xxxxx.edgecastcdn.net/images/ninja.png
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: image/png
Date: Sat, 21 Feb 2015 09:42:46 GMT
Etag: "11214d-52cb-50f5a3ee19e00"
Last-Modified: Wed, 18 Feb 2015 10:26:00 GMT
Server: ECAcc (sin/ECF4)
X-Cache: HIT
Content-Length: 21195

# curl -I -H "Host: cdn.mysl01.com" http://xxxxx.http.cdn.softlayer.net/images/ninja.png
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: image/png
Date: Sat, 21 Feb 2015 09:42:46 GMT
Etag: "11214d-52cb-50f5a3ee19e00"
Last-Modified: Wed, 18 Feb 2015 10:26:00 GMT
Server: ECAcc (sin/ECF4)
X-Cache: HIT
Content-Length: 21195

終わりに

これを書くための動作チェックに色々時間かかりました。EdgeCast本家の解説記事が欲しい。。。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3