Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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本家の解説記事が欲しい。。。

testnin2
このサイトにおける掲載内容はあくまで私自身の見解であり、必ずしも私の所属団体・企業における立場、戦略、意見を代表するものではありません。 近年はクラウドの魅力に惹かれてクラウドを中心とした提案活動・技術支援を行っています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away