この文書はNHN Cloud CDNコンソールでCDNサービスを構成して利用する方法を説明します。
Contents Delivery > CDNのCDNサービスタブで作成ボタンをクリックすると、CDNサービス作成ダイアログボックスが表示されます。 CDNサービスドメインは[サービスID].toastcdn.netの形式で自動作成されます。所有しているドメインをサービスドメインで利用するには、ドメインエイリアス(Domain Alias)機能を利用できます。 作成をリクエストした後、サービスの配布が完了するまで最大2時間かかります。配布が完了した後、サービスを利用できます。
[参考] CDN最初作成時、ダウンロード最適化所要期間 CDNを初めて作成した後、最大3日間はダウンロード速度が多少遅くなる場合があります。
基本情報を設定します。
説明 CDNサービスの説明を追加します。
ドメインエイリアス TOSAT CDNは基本的に[サービスID].toastcdn.net形式のサービスドメインアドレスを提供しています。 基本サービスドメインアドレスではない所有ドメインでCDNサービスを利用するにはドメインエイリアスで設定してください。 所有しているドメインでHTTPSプロトコルサービスを利用するには、まず証明書管理タブで証明書を発行した後、ドメインエイリアスを設定してください。 ドメインエイリアスを設定した後は、ドメインのDNSサービス提供業者で、次のようにCNAMEレコードを登録する必要があります。DNS設定関連はDNSサービス提供業者にお問い合わせください。
コールバック CDNサービス作成と変更作業(修正、一時停止/再開、削除)は数時間かかります。 作業が完了した後、設定したコールバックURLに変更状態とCDN設定情報を受け取るにはコールバックを設定してください。コールバックで伝達される情報はAPIガイド文書を参照してください。
パス(path)変数 | 説明 | サンプル伝達値 |
---|---|---|
{appKey} | CDNサービスのアプリキー | コンソールで発行したアプリキー |
{domain} | CDNサービス名 | [サービスID].toastcdn.net |
{status} | 現在のCDNサービスの状態 | OPEN、SUSPEND、CLOSE、ERROR |
{isSuccessful} | サービス変更作業が成功したか(API v1.0はサポートしません) | "true"または"false" |
CDNサービスへ配布する原本ファイルを提供するサーバーを設定します。
原本タイプ
オリジンサーバー
オリジンサーバーはCDNサービスへ配布する原本ファイルを提供するサーバーです。オリジンサーバーはIPv4または完全修飾ドメイン名(FQDN、fully qualified domain name)形式で入力できます。IPアドレスは変更される可能性が高いため、ドメインで設定することを推奨します。
運用中のオリジンサーバーがない場合は、オリジナルタイプのインスタンスオプションを選択してNHN Cloud Instanceサービスのインスタンスを使用するか、オブジェクトストレージオプションを選択してNHN Cloud Object Storageサービスのコンテナを利用してください。
CDNサービスドメインでHTTPS転送をサポートするには、オリジンサーバーがHTTPSレスポンスをサポートする必要があります。
これはオリジンサーバーにNHN Cloud CDNが信頼する証明書のインストールが必要であることを意味します。
信頼する証明書は次の表を参照してください。
もしオリジンサーバーがHTTPSレスポンスをサポートできない場合、原本リクエストHTTPプロトコルダウングレード設定を利用してください。
ただし、オリジンリクエストHTTPプロトコルのダウングレードは制約があるため、オリジンサーバーがHTTPSプロトコルをサポートすることを推奨します。
[表1]信頼する証明書リスト
Common name | Expire Date | SHA-1 Fingerprint |
---|---|---|
SecureTrust CA | 1.Jan.30 | 8782c6c304353bcfd29692d2593e7d44d934ff11 |
Entrust.net Certification Authority (2048) | 24.Jul.29 | 503006091d97d4f5ae39f7cbe7927d7d652d3431 |
DigiCert Global Root CA | 10.Nov.31 | a8985d3a65e5e5c4b2d7d66d40c6dd2fb19c5436 |
30.Sep.23 | 36b12b49f9819ed74c9ebc380fc6568f5dacb2f7 | |
QuoVadis Root CA 2 G3 | 13.Jan.42 | 093c61f38b8bdc7d55df7538020500e125f5c836 |
thawte Primary Root CA | 17.Jul.36 | 91c6d6ee3e8ac86384e548c299295c756c817b81 |
Go Daddy Root Certificate Authority - G2 | 1.Jan.38 | 47beabc922eae80e78783462a79f45c254fde68b |
GeoTrust Primary Certification Authority | 17.Jul.36 | 323c118e1bf7b8b65254e2e2100dd6029037f096 |
VeriSign Class 3 Public Primary Certification Authority - G4 | 19.Jan.38 | 22d5d8df8f0231d18df79db7cf8a2d64c93f6c3a |
Entrust Root Certification Authority | 28.Nov.26 | b31eb1b740e36c8402dadc37d44df5d4674952f9 |
29.May.29 | 5f3b8cf2f810b37d78b4ceec1919c37334b9c774 | |
AffirmTrust Commercial | 31.Dec.30 | f9b5b632455f9cbeec575f80dce96e2cc7b278b7 |
Amazon Root CA 4 | 26.May.40 | f6108407d6f8bb67980cc2e244c2ebae1cef63be |
Certum CA | 11.Jun.27 | 6252dc40f71143a22fde9ef7348e064251b18118 |
DST Root CA X3 | 30.Sep.21 | dac9024f54d8f6df94935fb1732638ca6ad77c13 |
TC TrustCenter Class 2 CA II | 1.Jan.26 | ae5083ed7cf45cbc8f61c621fe685d794221156e |
SwissSign Gold CA - G2 | 25.Oct.36 | d8c5388ab7301b1b6ed47ae645253a6f9f1a2761 |
USERTrust ECC Certification Authority | 19.Jan.38 | d1cbca5db2d52a7f693b674de5f05a1d0c957df0 |
QuoVadis Root CA 2 | 25.Nov.31 | ca3afbcf1240364b44b216208880483919937cf7 |
COMODO ECC Certification Authority | 19.Jan.38 | 9f744e9f2b4dbaec0f312c50b6563b8e2d93c311 |
USERTrust RSA Certification Authority | 19.Jan.38 | 2b8f1b57330dbba2d07a6c51f70ee90ddab9ad8e |
ISRG Root X1 | 4.Jun.35 | cabd2a79a1076a31f21d253635cb039d4329a5e8 |
DigiCert High Assurance EV Root CA | 10.Nov.31 | 5fb7ee0633e259dbad0c4c9ae6d38f1a61c7dc25 |
VeriSign Class 3 Public Primary Certification Authority - G5 | 17.Jul.36 | 4eb6d578499b1ccf5f581ead56be3d9b6744a5e5 |
GlobalSign | 15.Dec.21 | 75e0abb6138512271c04f85fddde38e4b7242efe |
QuoVadis Root CA 3 | 25.Nov.31 | 1f4914f7d874951dddae02c0befd3a2d82755185 |
GlobalSign | 18.Mar.29 | d69b561148f01c77c54578c10926df5b856976ad |
Starfield Services Root Certificate Authority - G2 | 1.Jan.38 | 925a8f8d2c6d04e0665f596aff22d863e8256f3f |
Baltimore CyberTrust Root | 13.May.25 | d4de20d05e66fc53fe1a50882c78db2852cae474 |
AAA Certificate Services | 1.Jan.29 | d1eb23a46d17d68fd92564c2f1f1601764d8e349 |
Amazon Root CA 3 | 26.May.40 | 0d44dd8c3c8c1a1a58756481e90f2e2affb3d26e |
VeriSign Class 3 Public Primary Certification Authority - G3 | 17.Jul.36 | 132d0d45534b6997cdb2d5c339e25576609b5cc6 |
GlobalSign Root CA | 28.Jan.28 | b1bc968bd4f49d622aa89a81f2150152a41d829c |
Actalis Authentication Root CA | 22.Sep.30 | f373b387065a28848af2f34ace192bddc78e9cac |
AffirmTrust Networking | 31.Dec.30 | 293621028b20ed02f566c532d1d6ed909f45002f |
AffirmTrust Premium | 31.Dec.40 | d8a6332ce0036fb185f6634f7d6a066526322827 |
QuoVadis Root Certification Authority | 18.Mar.21 | de3f40bd5093d39b6c60f6dabc076201008976c9 |
6.Jun.37 | feb8c432dcf9769aceae3dd8908ffd288665647d | |
GeoTrust Primary Certification Authority - G3 | 2.Dec.37 | 039eedb80be7a03c6953893b20d2d9323a4c2afd |
thawte Primary Root CA - G2 | 19.Jan.38 | aadbbc22238fc401a127bb38ddf41ddb089ef012 |
VeriSign Universal Root Certification Authority | 2.Dec.37 | 3679ca35668772304d30a5fb873b0fa77bb70d54 |
Cybertrust Global Root | 15.Dec.21 | 5f43e5b1bff8788cac1cc7ca4a9ac6222bcc34c6 |
Global Chambersign Root | 1.Oct.37 | 339b6b1450249b557a01877284d9e02fc3d2d8e9 |
SwissSign Silver CA - G2 | 25.Oct.36 | 9baae59f56ee21cb435abe2593dfa7f040d11dcb |
Amazon Root CA 1 | 17.Jan.38 | 8da7f965ec5efc37910f1c6e59fdc1cc6a6ede16 |
Entrust Root Certification Authority - G2 | 8.Dec.30 | 8cf427fd790c3ad166068de81e57efbb932272d4 |
Amazon Root CA 2 | 26.May.40 | 5a8cef45d7a69859767a8c8b4496b578cf474b1a |
DigiCert Assured ID Root CA | 10.Nov.31 | 0563b8630d62d75abbc8ab1e4bdfb5a899b24d43 |
30.Jun.34 | 2796bae63f1801e277261ba0d77770028f20eee4 | |
COMODO Certification Authority | 1.Jan.30 | 6631bf9ef74f9eb6c9d5a60cba6abed1f7bdef7b |
AddTrust External CA Root | 30.May.20 | 02faf3e291435468607857694df5e45b68851868 |
COMODO RSA Certification Authority | 19.Jan.38 | afe5d244a8d1194230ff479fe2f897bbcd7a8cb4 |
thawte Primary Root CA - G3 | 2.Dec.37 | f18b538d1be903b6a6f056435b171589caf36bf2 |
DigiCert Global Root G3 | 15.Jan.38 | 7e04de896a3e666d00e687d33ffad93be83d349e |
GeoTrust Global CA | 21.May.22 | de28f4a4ffe5b92fa3c503d1a349a7f9962a8212 |
DigiCert Global Root G2 | 15.Jan.38 | df3c24f9bfd666761b268073fe06d1cc8d4f82a4 |
[表2]使用可能なオリジンサーバーポート番号
ポート番号 |
---|
72, 488, 1080, 1443, 7070 |
8000-9001 |
11080-11110 |
80-89 |
591, 1088, 2080, 7612 |
12900-12949 |
443, 777, 1111, 7001, 7777 |
9901-9908 |
45002 |
[例]ソースパスを /files/imagesに設定した場合
- 原本ファイルURL:http://your.origin.com/files/images/logo.png
- CDNサービスURL:http://[サービスID].toastcdn.net/logo.png
- CDNサービスURLでソースパス(/files/images)を省略してリクエストできます。
- オリジンリクエストHTTPプロトコルのダウングレード
CDNエッジ(edge)サーバーは、オリジンサーバーに原本ファイルをリクエストする時、クライアントのオリジンリクエスト(request)のサービスプロトコル(HTTP/HTTPS)でリクエストします。
すなわち、クライアントからHTTPSでリクエストし、オリジンサーバーがHTTPSレスポンスをサポートしていない場合、 CDNエッジサーバーからオリジンサーバーにリクエストする時、HTTPSプロトコルでリクエストするため、原本ファイルを受け取れません。 オリジンサーバーがHTTPプロトコルのみサポートしている場合、オリジンサーバーHTTPプロトコルダウングレード設定を使用してCDNエッジサーバーからオリジンサーバーにリクエストする時、HTTPSプロトコルをHTTPプロトコルへダウングレードしてリクエストできます。 つまり、クライアントからCDNエッジサーバー間は暗号化通信(HTTPS)で通信し、CDNエッジサーバーからオリジンサーバー間は非暗号化通信(HTTP)で通信します。 原本リクエストHTTPプロトコルをダウングレードする時は、次のような制約があります。 [注意]オリジンリクエストHTTPプロトコルのダウングレードの制約事項- サイトアドレス全体はプロトコルのダウングレードができません。例えばオリジンサーバーのサイトアドレス全体www.nhn.comはダウングレードできません。
- GET、HEADおよびOPTIONSメソッド以外のメソッドはサポートされません。
- CDNサーバーからオリジンサーバーにダウングレードをリクエストする時、次のヘッダーは除外される場合があります。 Origin, Referer, Cookie, Cookie2, sec-*, proxy-*
- Forward Host Header CDNサーバーがオリジンサーバーへ原本ファイルをリクエストする時に送信するHostヘッダー値を設定します。 オリジンサーバーが名前ベースのバーチャルホストで運用中の場合、リクエストホストヘッダー設定が必要な場合もあります。オリジンサーバーの運用形態に従って適切な設定値を選択してください。
- オリジンサーバーホスト名:オリジンサーバーのホスト名をHostヘッダーに設定します。
- リクエストホストヘッダ:クライアントリクエストのHostヘッダーに設定します。
CDNサービスのルートパスに対するアクセス制御を設定できます。
CDNで基本的に許可するメソッドはGET、HEAD、OPTIONSで、それ以外のメソッドをリクエストすると拒否されます。
該当メソッド以外のメソッドを許可するには、メソッドを選択して設定します。
CDNキャッシュ動作設定とキャッシュ時間を設定できます。
キャッシュ設定 CDNサーバーが原本ファイルをキャッシュするときに使用するキャッシュ設定を選択できます。
キャッシュの有効期限(秒) キャッシュの有効期限を指定するにはユーザー設定使用ボタンをクリックしてキャッシュの有効期限(秒)でキャッシュの有効期限を変更します。
キャッシュキーにクエリ文字列を含めるかの設定 URLベースで作成されるキャッシュキーにリクエストクエリ文字列を含めるかどうかを設定できます。
[参考]キャッシュ時間のデフォルト値と有効範囲 キャッシュ時間のデフォルト値は0です。デフォルト値を0に設定すると、キャッシュ時間は604,800(単位/秒)=1週間です。 キャッシュ時間は、デフォルト値の0から2,147,483,647(単位/秒)まで入力できます。
[参考] NHN Cloud Object Storageサービスで作成したコンテナをオリジンサーバーとして使用する場合 Large File Optimization機能が正常に動作するにはオリジンサーバーから渡されるETagレスポンスヘッダが二重引用符で囲まれている必要があります。 NHN Cloud Object StorageコンテナのETagレスポンスヘッダ形式設定の詳細についてはObject StorageサービスのAPIガイド内のコンテナ設定変更 > RFCを遵守するETag形式使用設定を参照してください。
リファラーリクエストヘッダーにコンテンツのアクセス管理を設定します。
リファラーリクエストヘッダーは、現在リクエストされたページリンクより前のウェブページアドレスを含みます。リファラーリクエストヘッダーにより、どの経路でリクエストが流入したかを把握できます。リファラーヘッダアクセス管理では、特定のリファラーリクエストヘッダーのみユーザーコンテンツにアクセスできるよう設定できます。 正規表現形式で入力できます。複数入力する場合は改行して入力します。
ホワイトリスト(whitelist)タイプ:
リファラーヘッダがない場合、アクセス許可 リファラー(referer)リクエストヘッダがない場合に、コンテンツアクセスを許可するかどうかを選択します。
[例]
- タイプ:ホワイトリスト(Whitelist)
- 正規表現:
^https://[a-zA-Z0-9._-]*\.nhn\.com/.*
任意のnhn.comサブドメインの下層パスからリソースをリクエストした場合にのみ、コンテンツアクセスを許可します。[参考]正規表現式のエスケープ文字 一部の文字は、正規表現で特殊文字として扱われます。 例えば、正規表現でドット(
.
)は、すべての文字にマッチする特殊文字です。 特殊文字としての意味ではなく、通常の文字として解釈する必要がある場合は、エスケープ文字バックスラッシュ(\
)を特殊文字の前に追加してください。(例:\.
) 正規表現の特殊文字には^ . [ ] $ ( ) | * + ? { } \
などがあります。 複数のリファラーを制御する時は、次の行に連続して入力します。 APIで複数のリファラーを設定する時は\nトークンで区切って入力します。
Auth Token認証アクセス管理は、コンテンツの要求に認証トークンを追加してCDNエッジサーバーで検証されたトークンのみコンテンツアクセスを許可するセキュリティ機能です。 1度だけコンテンツアクセスを許可したり、制限されたユーザーのみコンテンツにアクセスできるように制御できます。 トークンなかったり、無効なトークンでコンテンツを要求した場合、403 Forbiddenレスポンスが返り、コンテンツにアクセスできません。
Auth Token認証アクセスをCDNサービスに適用するには、次の段階に従って作業する必要があります。
[注意]
Auth Token認証アクセス管理はNHN Cloud CDNを利用してサービス中のアプリケーションでも次の実装を行う必要があります。 1. コンテンツアクセスに必要なトークンを作成する必要があります。 2. クライアント(最終コンテンツ消費者)が、作成されたトークンを含めてコンテンツを要求できるようにする必要があります。 この作業を行わずにAuth Token認証アクセス管理を設定した場合、トークン検証失敗によりコンテンツの要求が失敗する場合があるため注意してください。
CDNコンソールで、次の内容を参考にしてAuth Token認証アクセス管理を設定します。
[注意]リクエストURLパスとファイル拡張子 リクエストURLパスとファイル拡張子の両方を設定した場合、2つの条件のうち1つだけ一致してもトークンアクセス制御が動作します。 [例]リクエストURLパス /nhn/*,、ファイル拡張子png**が設定された場合: /nhn下位のすべてのファイルまたはファイル拡張子がpngのコンテンツに対してトークンを検証します。
最終コンテンツユーザーがコンテンツにアクセスするには、トークンと一緒にコンテンツを要求する必要があります。したがって、トークンを作成して最終コンテンツユーザーに発行する必要があります。 トークン作成はNHN Cloud CDNを利用してサービス中のアプリケーションで実装する必要があります。 トークンの作成方法は、次のサンプルコードを参考にしてください。
import org.apache.commons.lang3.StringUtils;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Calendar;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NhnCloudAuthTokenAccessControlExample {
// NHN Cloudコンソールで確認した認証トークン暗号化キー
private static final String AUTH_TOKEN_ENCRYPT_KEY = "{NHN Cloud CDNサービスのトークン暗号化キー}";
// トークン有効時間(seconds)
private static final Long TOKEN_DURATION_SECONDS = 3600L;
public static void main(String[] args) throws AuthTokenException {
String path = "/nhn/%EC%9D%B8%EC%A6%9D/%E1%84%91%E1%85%A1%E1%84%8B%E1%85%B5%E1%86%AF.png";
String singleWildcardPath = "/nhn/%EC%9D%B8%EC%A6%9D/*";
String[] multipleWildcardPath = {"/nhn/%EC%9D%B8%EC%A6%9D*", "/nhn/auth/*"};
System.out.println(" ----------------- ");
System.out.println("基本トークン発行");
System.out.println(" ----------------- ");
AuthToken authToken = new AuthToken(AUTH_TOKEN_ENCRYPT_KEY, TOKEN_DURATION_SECONDS);
System.out.println("単一URLトークン:token=" + authToken.generateURLToken(path));
System.out.println("ワイルドカードトークン:token=" + authToken.generateWildcardPathToken(singleWildcardPath));
System.out.println("マルチワイルドカードトークン:token=" + authToken.generateWildcardPathToken(multipleWildcardPath));
System.out.println(" ----------------- ");
System.out.println("セッション識別子を含むトークン発行");
System.out.println(" ----------------- ");
AuthToken authTokenWithSession = new AuthToken(AUTH_TOKEN_ENCRYPT_KEY, TOKEN_DURATION_SECONDS, "example-sessionId");
System.out.println("単一URLトークン: token=" + authTokenWithSession.generateURLToken(path));
System.out.println("ワイルドカードトークン:token=" + authTokenWithSession.generateWildcardPathToken(singleWildcardPath));
System.out.println("複数ワイルドカードトークン:token=" + authTokenWithSession.generateWildcardPathToken(multipleWildcardPath));
}
public static class AuthToken {
/** トークン暗号化アルゴリズム(SHA256固定) **/
private static final String HMAC_SHA_256 = "HmacSHA256";
/**トークン暗号化キー(NHN Cloud CDNコンソール > Auth Token認証アクセス管理 > 暗号化キー) **/
private String key;
/** セッション識別子 */
private String sessionId;
/**トークンの有効時間(単位:秒) */
private Long durationSeconds;
/**トークン作成前、url encodeを適用するかどうか */
private Boolean escapeEarly;
/** トークンBodyフィールドのセパレータ */
private final String fieldDelimiter = "~";
/** wildcardPathセパレータ */
private final String aclDelimiter = "!";
public AuthToken(String key, Long durationSeconds) {
this.key = key;
this.sessionId = null;
this.durationSeconds = durationSeconds;
this.escapeEarly = true;
}
public AuthToken(String key, Long durationSeconds, String sessionId) {
this.key = key;
this.sessionId = sessionId;
this.durationSeconds = durationSeconds;
this.escapeEarly = true;
}
/**
* 単一URLに対するトークンを作成します。
* @param path : contents url (example: /auth/contents/example.png)
* @return created token
* @throws AuthTokenException
*/
public String generateURLToken(String path) throws AuthTokenException {
return generateToken(createExpireTime(), this.sessionId, path, null);
}
/**
* ワイルドカードパスに対するトークンを作成します。
* @param wildcardPath : "/auth/contents/*"
* @return作成されたトークン値
* @throws AuthTokenException
*/
public String generateWildcardPathToken(String wildcardPath) throws AuthTokenException {
return generateWildcardPathToken(new String[] {wildcardPath});
}
/**
* 複数のワイルドカードパスに対するトークンを作成します。
* @param wildcardPaths (example: ["/auth/contents/*", "/auth/*/images/*"])
* @return作成されたトークン値
* @throws AuthTokenException
*/
public String generateWildcardPathToken(String... wildcardPaths) throws AuthTokenException {
return generateToken(createExpireTime(), this.sessionId, null, wildcardPaths);
}
private String createExpireTime() {
Long nowSeconds = Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTimeInMillis() / 1000L;
Long exp = nowSeconds + this.durationSeconds;
return exp.toString();
}
private String generateToken(String exp, String sessionId, String path, String[] wildcardPaths) throws AuthTokenException {
try {
StringBuilder token = new StringBuilder();
token.append("exp=")
.append(exp)
.append(this.fieldDelimiter);
if (wildcardPaths != null && wildcardPaths.length > 0) {
token.append("acl=")
.append(escapeEarly(StringUtils.join(wildcardPaths, this.aclDelimiter)))
.append(this.fieldDelimiter);
}
if (sessionId != null && sessionId.length() > 0) {
token.append("id=")
.append(escapeEarly(sessionId))
.append(this.fieldDelimiter);
}
StringBuilder hashSource = new StringBuilder(token);
if (path != null && path.length() > 0) {
hashSource.append("url=")
.append(escapeEarly(path))
.append(this.fieldDelimiter);
}
// remove last fieldDelimiter char
hashSource.deleteCharAt(hashSource.length() - 1);
Mac hmac = Mac.getInstance(HMAC_SHA_256);
byte[] keyBytes = DatatypeConverter.parseHexBinary(this.key);
SecretKeySpec secretKey = new SecretKeySpec(keyBytes, HMAC_SHA_256);
hmac.init(secretKey);
byte[] hmacBytes = hmac.doFinal(hashSource.toString().getBytes());
return token.toString() + "hmac=" + String.format("%0" + (2 * hmac.getMacLength()) + "x", new BigInteger(1, hmacBytes));
} catch (NoSuchAlgorithmException e) {
throw new AuthTokenException(e.getMessage());
} catch (InvalidKeyException e) {
throw new AuthTokenException(e.getMessage());
}
}
private String escapeEarly(final String text) throws AuthTokenException {
if (this.escapeEarly == true) {
try {
StringBuilder newText = new StringBuilder(URLEncoder.encode(text, "UTF-8"));
Pattern pattern = Pattern.compile("%..");
Matcher matcher = pattern.matcher(newText);
String tmpText;
while (matcher.find()) {
tmpText = newText.substring(matcher.start(), matcher.end()).toLowerCase();
newText.replace(matcher.start(), matcher.end(), tmpText);
}
return newText.toString();
} catch (UnsupportedEncodingException e) {
return text;
} catch (Exception e) {
throw new AuthTokenException(e.getMessage());
}
} else {
return text;
}
}
}
public static class AuthTokenException extends Exception {
private static final long serialVersionUID = 1L;
public AuthTokenException(String msg) {
super(msg);
}
}
}
AuthTokenクラスのメンバー変数説明
AuthTokenクラスの公開メソッド(Public Method)
public String generateURLToken(String path)
public String generateWildcardPathToken(String wildcardPath), public String generateWildcardPathToken(String... wildcardPaths)
クライアント(最終コンテンツ消費者)がコンテンツリクエスト時、コンソールで設定したトークン位置に作成されたトークン値を含めてリクエストするようにします。
curl --cookie "token={作成されたトークン値}" \
-X GET http://xxx.toastcdn.net/auth/contents/example.png
curl -H "token: {作成されたトークン値}" \
-X GET http://xxx.toastcdn.net/auth/contents/example.png
curl -d "token={作成されたトークン値}" \
-X GET http://xxx.toastcdn.net/auth/contents/example.png
CDNからユーザーにレスポンスする際に伝達されるヘッダを追加/変更/削除する機能です。
ヘッダは重複していないヘッダー名で最大10個まで設定できます。
[参考] CORS(オリジン間リソース共有)設定 下記のようにHTTPレスポンスヘッダを設定してCORSを許可できます。 - Action: Modify - ヘッダ名: Access-Control-Allow-Origin - ヘッダ値: *(ワイルドカード)または許可する元のURI
サービスドメイン名を除くCDNサービス設定を変更できます。
次のようにCDNサービス修正ページに移動します。
修正作業は数十分以内に完了しますが、ドメインエイリアス設定の変更時は数時間かかる場合があります。
[参考] CDNサービス修正中配布状態とサービス状態 サービス修正作業が進行中の場合は、既存のCDNサービス設定で運用されます。 修正作業が失敗した場合、既存設定情報にロールバックされ、CDNサービスリストの配布状態が赤色で表示されます。設定情報にエラーがあったり、内部的なエラーが発生した場合は修正作業が失敗します。
CDNサービスを一時的に中断または、再開することができます。
[参考]一時停止と再開動作の遅延 CDNサービスの一時停止と再開は、CDNサービスドメインのDNSレコードを変更して動作します。 したがってキャッシュDNSサーバーでTTLの間キャッシュされているか、DNSの配信に応じて、一時停止/再開が完了しても、即時に一時停止/再開が動作しない場合もあります。 [注意]発行された証明書が連携されているCDNサービスの一時停止 証明書を連携しているCDNサービスを一時停止する場合、証明書の更新ができません。 証明書管理 > 証明書リストの証明書更新開始日の前にCDNサービスを再開してください。 証明書更新開始日から5日間は、証明書更新期間のため、この期間に一時停止を行うと証明書が無効になる場合もあるため、注意してください。
CDNサービスを削除します。削除すると復旧できませんので注意してください。
[参考] CDNサービス削除の所要時間 CDNサービス削除作業は数時間(最大2~3時間)かかる場合があります。 [注意]発行された証明書が連携されているCDNサービスの削除 証明書が連携されているCDNサービスを削除すると、証明書を更新できません。 証明書管理の証明書リストから、証明書更新開始日より前にサービス中の他CDNサービスへ連携してください。 証明書更新開始日から5日間は、証明書更新期間です。この期間に削除を行うと証明書が無効になる場合があるため、注意してください。
CDNキャッシュサーバーは、キャッシュ設定に従って、指定された時間オリジンサーバーのファイルをキャッシュします。ファイルをキャッシュすると、原本ファイルが変更されてもキャッシュが満了するまでは変更前の原本ファイルを維持します。 変更された原本ファイルでコンテンツをすぐにアップデートするにはPurgeをリクエストする必要があります。 Purgeを行うと、リクエストしたコンテンツの古いキャッシュデータを削除し、オリジンサーバーから新しい原本ファイルを再度キャッシュします。
PurgeタブをクリックしてPurgeボタンをクリックします。
Purgeタイプを選択します。
Purgeには使用量制限がありますので、下記の表を参考にして使用量を超えないように注意してください。
分類 | [サービスID].toastcdn.net |
---|---|
制限単位 | プロジェクト別(AppKey) |
特定ファイル | 1秒間に1回リクエスト可能、リクエスト毎のURL数制限:200 URL |
ワイルドカード | 未サポート |
全体ファイルタイプ | 5分毎のリクエスト可能数:1回 |
[注意] [サービスID].toastcdn.netサービスを作成した後、Purge失敗エラー CDNサービスを作成した後、約1時間以内はPurgeリクエストに失敗する可能性があります。その後も引き続き失敗する場合はNHN Cloudサポートにお問い合わせください。
ネットワーク転送量、 HTTPステータスコード別統計及びダウンロードが最も多いコンテンツの順位統計を確認できます。 7日以内の統計データは正確ではないため、参考用でのみ利用してください。正確ま統計データは7日以降に確認してください。
[参考]最大検索期間 最近90日間の統計データのみ照会が可能です。 [参考] Top Contents By Hits統計制約事項 1日前まで、1日以上の範囲で照会が可能です。 100KB以下のコンテンツ、またはリクエスト回数が1日50回未満のコンテンツは統計から除外されます。
所有しているドメインでコンテンツをHTTPSで転送するには、所有しているドメインの証明書をCDNサーバーに配布する必要があります。証明書がない場合、クライアント(ブラウザ)とCDNエッジサーバー間の暗号化通信(HTTPS)を行うことができず、証明書エラーが発生します。 NHN Cloud CDNの証明書管理は次のような機能を提供します。
証明書管理タブで証明書を発行できます。
[注意]証明書発行前の確認事項 1. 所有しているドメインのみ証明書の発行が可能なため、先にドメインを購入してから進行してください。 2. 他の認証機関(CA、certificate authority)で発行した証明書は利用できません。 3. 単一ドメインの証明書発行のみ行えます。ワイルドカード、マルチドメインなどの証明書はサポートしません。 4. 証明書の発行は1つのプロジェクトにつき5個に制限されます。限度の調整が必要な場合はNHN Cloudサポートへお問い合わせください。 5. 新規証明書の発行をリクエストした後、ドメイン検証段階は数十分(最大1~2時間)後に変更される場合があります。証明書の状態がドメイン検証状態に変更されたらNHN Cloudプロジェクトメンバーを対象にメールが送信されます。もしシステムエラーによりメールが送信されない場合、コンソールで状態を確認してください。
新規証明書の発行をリクエストした後、証明書の状態が「ドメイン検証」になったら、ドメインの検証を行ってください。 ドメインの検証方法は、コンソールでドメインを選択して確認するか、プロジェクトメンバーに転送されたドメイン検証ガイドメールの内容を参照してください。
ドメイン検証は、発行をリクエストした証明書ドメインの実際の所有者であることを確認する段階です。ドメイン検証を行っていない場合、証明書の発行ができません。 ドメインの所収者であることを確認するために、ドメイン検証方式を通してドメインの制御権限を確認します。 ドメイン検証方式には、DNS TXTレコード追加またはHTTPページ追加方式があります。2つの方式のうち1つを実施してください。
ドメインのDNS制御権限を確認してドメインを検証します。
レコード値:任意の文字列(コンソールまたは送信されたメールガイドのレコード値を作成します。)
nslookupコマンドを使って、追加したTXTレコードを確認します。DNS配信時間に応じて確認できるまで時間がかかる場合があります。
nslookup -type=TXT _acme-challenge.[発行リクエストした証明書ドメイン].
次の画面はNHN Cloud DNS+ サービスで設定した例です。DNSサービス提供業者によって設定方法は異なる場合があります。
ドメインが接続されたWebサーバーにHTTPページを追加してドメインを検証します。
[注意]ドメイン検証の注意事項 1. ドメイン検証は、証明書発行リクエストを行った日から5日以内に実施する必要があります。期間内に実施しなかった場合、証明書の発行は自動でキャンセル処理が行われます。 2. ドメイン検証作業完了後、検証が成功した際は、数時間で証明書の発行および配布作業が行われます。1日以上実施されない場合、ドメイン検証作業の内容が正しいかを確認します。問題がないにもかかわらず実施されない場合はNHN Cloudサポートへお問い合わせください。 3. ドメイン検証方式のHTTPページ追加方式は、HTTPサーバーが基本ポート80で運用中の場合にのみ使用できます。ポートの変更ができない場合は、DNS TXTレコード追加方式を利用してください。
ドメイン検証に成功したら、数時間以内に証明書の発行および配布作業が実施されます。 コンソールで証明書の状態が証明書発行および配布段階と表示され、NHN Cloudプロジェクトメンバーを対象に通知メールが送信されます。 この段階では別途作業する内容はありません。
[参考]証明書の発行と配布段階の作業時間 証明書の発行および配布作業は最大9時間以上かかる場合があります。
発行された証明書を利用するには、CDNサービスと連携する必要があります。 この作業を行わなかったり、作業内容を維持しない場合、発行された証明書が無効になる場合があるため、注意してください。
CNAMEレコード設定:証明書ドメインのDNSサービス提供業者のDNS管理で、次のCNAMEレコードを追加します。
ドメインエイリアス設定:証明書を利用するCDNサービスにドメインエイリアス設定を追加します。
[参考] CNAMEレコード配信時間 CNAMEレコードの設定時、さまざまな要因でDNSの配信に時間がかかることがあります。したがってサービス連動プロセスを正しく行った後も一定時間、証明書の発行状態が[CDNサービス連動待機]と表示されることがあります。 設定を正しく行っても24時間以上[CDNサービス連動待機]状態が続く場合はNHN Cloudサポートへお問い合わせください。
[注意]証明書満了注意事項 NHN Cloud CDNで提供する証明書は、証明書が無効になる前に自動で証明書の更新を実施します。 自動的に証明書の更新を行うには、使用中の証明書がCDNサービスと連携している必要があります。 CDNサービスと連携していない場合、証明書更新期間に更新することができず、証明書が無効になる場合があります。 証明書の更新は証明書管理 > リストに表示された証明書更新開始日から5日以内に行われます。 証明書が無効にならないように、次の設定事項を常に維持してください。
- 証明書のドメインは、CNAMEレコードに連携するCDNサービスドメインアドレスに委任する必要があります。
- 連携するCDNサービスのドメインエイリアスに証明書ドメインが設定されている必要があります。
- 証明書が連携されたCDNサービスを一時停止すると、証明書を更新できません。証明書の更新開始日前に再開するか、運用中の他のCDNサービスに証明書を連携してください。
- 証明書が連携されたCDNサービスを削除すると、証明書を更新できません。削除する前に、運用中の他のCDNサービスに証明書を連携してください。 CDNサービス連携作業が完了すると、証明書の状態が「正常」と表示されます。
[参考]発行された証明書エラー発生時の措置事項 NHN Cloud CDNで提供する証明書のRoot証明書の中の1つであるIdenTrust DST Root CA x3が2021年9月30日に有効期限切れになり、一部の古い端末や旧型ブラウザで問題が発生することがあります。 クライアントでERR_CERT_DATE_INVALIDエラーにより問題が発生する場合は、以下の内容を参考にしてOS設定変更後にアップデートまたはRoot証明書の手動インストールなどの措置が必要です。 1. ISRG x1証明書ダウンロードリンク: ダウンロードリンク 2. Windows OS設定変更参考ガイド:リンク 3. Chromeブラウザ参考ガイド:リンク