このチュートリアルでは、OpenResty Edge を使用してカスタムレスポンスヘッダーを追加する方法を紹介します。サーバープロセスの再起動や再読み込みは必要ありません。

OpenResty Edge でカスタムレスポンスヘッダーを追加する手順:

  1. Edge の管理コンソールを開き、対象のアプリケーションに入ります。
  2. 「Page Rules」 に移動し、新しいルールを追加します。
  3. 「Add response header」 アクションを追加します。
  4. ヘッダーの名前(例: X-TEST-EXTRA-HEADER)とを入力します。値には文字列のほか、組み込み変数System Hostname または名前を指定した Request Header)も使用できます。
  5. リリースを作成すると、ルールがすべてのゲートウェイクラスターへプッシュされます。

この変更は、サーバーの再読み込み・再起動・バイナリアップグレードを一切必要とせず反映されます。アップストリームへ送るヘッダーを書き換えたい場合は、OpenResty Edge でアップストリームリクエストに異なる Host ヘッダーを設定する方法をご覧ください。

以下では、スクリーンショット付きの詳細な手順を紹介します。

文字列を値としてレスポンスヘッダーを追加する方法

OpenResty Edge の Admin Web コンソールにアクセスしましょう。これはコンソールのサンプルデプロイメントです。各ユーザーは独自のローカルデプロイメントを持っています。以前の例のアプリケーション「test-edge.com」を引き続き使用します。

スクリーンショット

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

スクリーンショット

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

スクリーンショット

ここをクリックして新しいページルールを追加します。

Screenshot

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

スクリーンショット

「Add response header」を選択します。

スクリーンショット

レスポンスヘッダーには名前と対応する値の2つの部分があります。

Screenshot

レスポンスヘッダーに「X-TEST-EXTRA-HEADER」という名前を付けます。

スクリーンショット

ここでの値には、文字列または組み込み変数を選択できます。まずは文字列でテストしてみましょう。

スクリーンショット

「hello world」と入力します。

スクリーンショット

このルールが既存の通常ルールの前に実行されるようにします。

Screenshot

このページルールを保存します。

スクリーンショット

いつものように、先ほどの変更をプッシュするために新しいバージョンを公開する必要があります。

スクリーンショット

リリースします!

スクリーンショット

新しいバージョンがすべてのゲートウェイサーバーに同期されました。

Screenshot

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

埋め込み動画

これらの設定変更は、サーバーの再読み込み、再起動、またはバイナリアップグレードを必要としません。そのため、非常に効率的でスケーラブルです。

埋め込み画像

ゲートウェイサーバーでテストしてみましょう。

スクリーンショット

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

スクリーンショット

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

Screenshot

ここで追加した「X-TEST-EXTRA-HEADER」レスポンスヘッダーが確認できます。

Screenshot

組み込み変数をヘッダーの値として使用する方法

次に、レスポンスヘッダーの値として組み込み変数を使用してみましょう。

スクリーンショット

このページルールを編集します。

スクリーンショット

レスポンスヘッダーの値として組み込み変数を選択します。

スクリーンショット

現在、組み込み変数には2つのオプションがあります。1つは「Request Header」で、これはリクエスト情報を取得できることを意味します。「Request Header」は名前を指定する必要があります。例えば、「Origin」、「Referer」などです。

Screenshot

もう1つは「System Hostname」で、これは以前に設定したゲートウェイサーバーの名前です。

スクリーンショット

「System Hostname」を試してみましょう。

スクリーンショット

保存します。

スクリーンショット

先ほどと同様に、この新しいページルールをプッシュするために公開する必要があります。

スクリーンショット

リリースします!

Screenshot

これでゲートウェイクラスターとサーバーすべてにプッシュされました。

スクリーンショット

まず、以前のサーバーのホスト名を確認できます。

スクリーンショット

このゲートウェイサーバーのホスト名は以下の通りです。

スクリーンショット

次に、ターミナルに切り替えます。

スクリーンショット

「X-TEST-EXTRA-HEADER」レスポンスヘッダーの値が、先ほど確認したホスト名に変更されています。

Screenshot

別のゲートウェイサーバーをテストしてみましょう。例えば、フランクフルトにあるこのサーバーのホスト名は以下の通りです。

スクリーンショット

再びターミナルに戻ります。

スクリーンショット

今度はレスポンスヘッダーの値が、フランクフルトサーバーのホスト名になっています。

Screenshot

FAQ: OpenResty Edge でのレスポンスヘッダー追加について

OpenResty Edge でレスポンスヘッダーを追加するにはサーバーの再起動が必要ですか?

いいえ。OpenResty Edge はページルールをすべてのゲートウェイクラスターへ同期し、再読み込み・再起動・バイナリアップグレードは一切不要で、変更は即座に反映されます。

OpenResty Edge のレスポンスヘッダーの値は動的にできますか?

はい。文字列のほか、組み込み変数を値として使用できます。System Hostname(ゲートウェイサーバー名)や、名前を指定した Request HeaderOriginReferer など)が利用可能です。

同じレスポンスヘッダーを OpenResty Edge のすべてのゲートウェイサーバーに適用するには?

OpenResty Edge のコンソールでリリースを作成するだけです。ページルールはすべてのゲートウェイクラスターとサーバーへ自動的に同期され、サーバーごとの設定は不要です。

OpenResty Edge の「Add response header」と「Set response header」の違いは?

Add response header はヘッダーを追加し、同名の既存ヘッダーはそのまま保持します。Set response header は同名の既存ヘッダーを上書きします。新規追加には前者を、強制的に書き換えたい場合は後者を使用します。アクションの一覧は公式ドキュメント Response Header Actions を参照してください。

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 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

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