OpenResty Edge でカスタムエラーページを設定するには、まず Global Config で再利用可能なグローバルページテンプレートを作成し、アプリケーションの Page Rules で HTTP レスポンスステータスコード(例:404)ごとに適用し、intercept upstream errors(アップストリームエラーの捕捉)を有効にします。テンプレートは CLIENT_IPCLIENT_COUNTRYHOST などの定義済み変数に対応しており、グローバル設定であるため、変更は即座に公開されて全ゲートウェイサーバーに同期されます——リロード、再起動、バイナリアップグレードは不要です。

このチュートリアルでは、OpenResty Edge の Web コンソール上で一連の流れを解説します。テンプレートの作成、カスタムエラーページ(または WAF ブロックページ)としての適用、実際のゲートウェイでのテスト、そしてグローバル書き換えルールですべてのアプリケーションに同じエラーページを再利用する方法までを扱います。

カスタムエラーページテンプレートを作成する

本記事では、OpenResty Edge でカスタムテンプレートを使用してエラーページを作成する方法をご紹介します。まずはコンソールにアクセスしましょう。こちらがコンソールのサンプルデプロイメントです。各ユーザーには独自のデプロイメントがあります。

OpenResty Edge Web コンソールのサンプルデプロイメント

まず、「Global Config」をクリックします。

OpenResty Edge の Global Config タブ

次に、「Global Page Templates」ページに移動します。ここでは、エラーページや WAF ブロックページをカスタマイズできるグローバルページテンプレートを作成できます。

OpenResty Edge の Global Page Templates ページ

ここで、このボタンをクリックして簡単なテンプレートを追加できます。

新しいグローバルページテンプレートを追加するボタン

ここでテンプレートに error-page-template-demo という名前を付けます。

エラーページテンプレートに error-page-template-demo と名前を付ける

HTML の内容については、いくつかの定義済みの変数を使用してカスタマイズできます:

定義済み変数を使って HTML コンテンツをカスタマイズする

例えば「CLIENT_IP」、

ページテンプレートの定義済み変数 CLIENT_IP

「CLIENT_COUNTRY」、

ページテンプレートの定義済み変数 CLIENT_COUNTRY

そして「HOST」などです。

ページテンプレートの定義済み変数 HOST

ここでクライアントの IP アドレスを出力できます。

エラーページテンプレートでクライアント IP を出力する

また、例としてリクエスト ID と user agent も出力できます。

エラーページにリクエスト ID と user agent を追加する

そして保存をクリックします。

カスタムエラーページテンプレートを保存する

これはグローバル設定であるため、このページテンプレートへの変更は即座に公開され、すべてのゲートウェイサーバーに同期されます。

ページテンプレートの変更が公開され全ゲートウェイサーバーに同期される

テンプレートをカスタムエラーページとして適用する

次に、サンプルアプリケーションに移動します:

OpenResty Edge でサンプルアプリケーションを開く

そして test-edge.com を検索し、ページテンプレートをカスタムエラーページとして適用します。

test-edge.com を選択してカスタムエラーページを適用する

アプリケーションに入ります。

test-edge.com アプリケーションに入る

そして「Page Rules」ページに移動します。

Page Rules ページを開く

「New Rules」をクリックします。

新しいページルールを追加する

新しいアクションを追加します。

ページルールに新しいアクションを追加する

ここでアクションタイプを選択または検索できます。

検索ボックスからアクションタイプを選択する

「customize error page」を検索します。

customize error page アクションを検索する

ここでは、エラーページに対応する HTTP レスポンスステータスコードを選択できます。

エラーページの HTTP レスポンスステータスコードを選択する

ここでは「404」のみを選択します。

404 ステータスコードを選択する

カスタムエラーページを設定する方法はいくつかあります。例えば、生の HTML、バックエンド URL、または以前にアップロードしたグローバル静的ファイルを使用する方法があります。

カスタムエラーページのソース選択肢:生の HTML、バックエンド URL、グローバル静的ファイル

ここでは、先ほど定義した「error-page-template-demo」という名前のグローバルページテンプレートを使用することを選択します。

グローバルページテンプレート error-page-template-demo を選択する

次に、もう一つアクションを追加する必要があります。

ページルールにもう一つアクションを追加する

検索ボックスをクリックします。

アクション検索ボックスをクリックする

「intercept upstream errors」を検索します。

intercept upstream errors アクションを検索する

アップストリームへのプロキシを既に設定しているため、このアクションを有効にすることでアップストリームのエラーを捕捉できます。

アップストリームプロキシ向けに intercept upstream errors を有効にする

さらに、このルールを他のルールの前に配置する必要があります。そうすることで、カスタムエラーページを返すことができます。

このルールをすべてのルールより前に配置する

保存すれば完了です。

ページルールを保存する

通常、「new page rule」をプッシュするには新しいバージョンを公開する必要があります。

新しいリリースを作成してページルールをプッシュする

ここをクリックして保留中の変更を公開します。

保留中の変更を公開する

公開をクリックします!

リリースを確定する

これで完全に同期されました。

設定がクラスター全体で完全に同期される

新しいページルールがすべてのゲートウェイクラスターとサーバーにプッシュされました。

ページルールがすべてのゲートウェイクラスターとサーバーにプッシュされる

設定の変更にはサーバーのリロード、再起動、バイナリアップグレードが不要なため、非常に効率的でスケーラブルです。

設定変更にサーバーのリロード、再起動、バイナリアップグレードは不要

ゲートウェイでカスタムエラーページをテストする

このルールを検証するために、ゲートウェイサーバーの1つをテストしてみましょう。

ルールをテストするゲートウェイサーバーを選択する

このサンフランシスコのゲートウェイサーバーの IP アドレスをコピーします。

サンフランシスコのゲートウェイサーバーの IP アドレスをコピーする

そして、ターミナルでテストを行います。

ターミナルからゲートウェイサーバーをテストする

これは先ほど見たサンフランシスコのゲートウェイサーバーの IP アドレスです。

サンフランシスコのゲートウェイサーバーの IP アドレス

これは存在しないランダムに生成された URL なので、404 レスポンスであることがわかります。

存在しないランダムな URL をリクエストして 404 を返す

コマンドを実行し続けます。

ゲートウェイに対して curl コマンドを実行する

リクエスト情報を HTML 形式で出力できます。これはエラーページの原因を調査する際に役立ちます。

HTML 形式のリクエスト情報を含むカスタム 404 エラーページの出力

より多くの情報を出力したり、エラーページのスタイルを変更したりしたい場合は、ページテンプレートを編集するだけです。変更は即座に公開され、有効になります。

カスタム 404 エラーページの出力。ページテンプレートを編集して更新できる

すべてのアプリケーションで同じエラーページを再利用する

すべてのアプリケーションで同じエラーページを使用したい場合は、グローバル書き換えルールを設定することもできます。

グローバル書き換えルールを使ってすべてのアプリケーションで同じエラーページを再利用する

「Global Rewrite Rules」ページに移動します。

Global Rewrite Rules ページを開く

ここをクリックして新しいルールを追加します。これはアプリケーション内の「Page Rules」とほぼ同じです。 この機能の詳細については、別のチュートリアルでご紹介します。

新しいグローバル書き換えルールを追加する

よくある質問

OpenResty Edge でカスタム 404 ページを設定するには?

Global Config でグローバルページテンプレートを作成し、アプリケーションの Page Rules に「customize error page」アクションを追加して 404 ステータスコードを選択し、そのテンプレートを指定します。アップストリームにプロキシしている場合は「intercept upstream errors」も有効にし、このルールをすべてのルールより前に配置することで、カスタムページが返されるようになります。

すべてのアプリケーションで同じカスタムエラーページを使えますか?

はい。アプリケーションごとに Page Rule を追加する代わりに、「Global Rewrite Rules」ページでルールを1つ追加します。使い方はアプリケーション内の Page Rule とほぼ同じですが、ゲートウェイ上のすべてのアプリケーションに同じカスタムエラーページが適用されます。

OpenResty Edge のエラーページテンプレートで使える変数は?

ページテンプレートの HTML コンテンツは、CLIENT_IPCLIENT_COUNTRYHOST などの定義済み変数に対応しています。さらに、リクエスト ID や user agent などの値も出力でき、問題調査の際に役立ちます。

カスタムエラーページの変更にゲートウェイのリロードや再起動は必要ですか?

いいえ。ページテンプレートはグローバル設定であるため、変更は即座に公開され、すべてのゲートウェイサーバーに同期されます。テンプレートを編集するとすぐに反映され、サーバーのリロード、再起動、バイナリアップグレードは不要です——そのため大規模クラスターでも効率的かつスケーラブルです。

WAF ブロックページもカスタマイズできますか?

はい。グローバルページテンプレートはカスタムエラーページと WAF ブロックページの両方を定義できるため、同じ再利用可能なテンプレートの仕組みで両方をカバーできます。

OpenResty Edge について

OpenResty Edge は、マイクロサービスと分散トラフィックアーキテクチャ向けに設計された多機能ゲートウェイソフトウェアで、当社が独自に開発しました。トラフィック管理、プライベート CDN 構築、API ゲートウェイ、セキュリティ保護などの機能を統合し、現代のアプリケーションの構築、管理、保護を容易にします。OpenResty Edge は業界をリードする性能と拡張性を持ち、高同時接続・高負荷シナリオの厳しい要求を満たすことができます。K8s などのコンテナアプリケーショントラフィックのスケジューリングをサポートし、大量のドメイン名を管理できるため、大規模ウェブサイトや複雑なアプリケーションのニーズを容易に満たすことができます。

著者について

章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。

章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しています。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っています。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立しました。同社の主力製品である OpenResty XRay動的トレーシング技術を利用した非侵入型の障害分析および排除ツール)と OpenResty Edge(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ています。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJITGDBSystemTapLLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しています。

翻訳

英文版 の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!