Nginx を使用したフロントエンド プロキシ

このページでは、NGINX をアプリケーション コンテナのフロントエンド プロキシとして使用する方法について説明します。これは、リクエストやレスポンスを処理する場合に便利です。アプリケーション コンテナが HTTP/1 のみをサポートしており、パフォーマンス上の理由でエンドツーエンドで HTTP/2 を使用する必要がある場合は、gzip 圧縮を追加するか、HTTP/2 を HTTP/1 に変換できます。

このページの例では、Nginx コンテナがすべての Cloud Run インスタンス上で、メインのサービング コンテナとして実行され、アプリケーション コンテナにリクエストを転送するように構成されています。この図のように、サイドカー コンテナとして動作します。

Cloud Run mc hello nginx 1

Cloud Run でフロントエンド プロキシを効果的に行うためには、Nginx サーバー プロキシ サーバー コンテナとウェブアプリ コンテナを単一の Cloud Run サービスとしてデプロイします。

Cloud Run mc hello nginx 2

この単一の Cloud Run サービスは、リクエストを受け入れ、Ingress(サービング)コンテナ(この場合はプロキシ サーバー)に配信します。次に、プロキシ サーバーは、localhost ネットワーク インターフェースを介してウェブアプリにリクエストを送信します。これにより、外部ネットワークを回避できます。

単一の Cloud Run サービスとしてデプロイすることでレイテンシとサービス管理のオーバーヘッドが削減され、外部ネットワークへの露出がなくなります。なお、Cloud Run は、サービスの開始時または停止時にサイドカー コンテナを起動または停止する場合を除き、サイドカー コンテナを直接操作しません。

ウェブアプリ コンテナやすべてのサイドカー コンテナは、さまざまなプログラミング言語で記述できます。PHP で記述されたサンプルについては、GitHub の PHP nginx サンプルをご覧ください。

始める前に

  1. Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Cloud Run API と Secret Manager API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。

    API を有効にする

  7. gcloud CLI をインストールして初期化します
  8. gcloud components update で Google Cloud CLI を更新します。
  9. gcloud init で Google Cloud CLI を構成します。
  10. gcloud auth login を使用して Google Cloud CLI で認証を行います。

デプロイに必要な権限

次のいずれかが必要です。

  • Cloud Run 管理者ロールとサービス アカウント ユーザー ロールの両方
  • この権限のリストを含むカスタムロール

構成の概要

以下の手順では事前にビルドされたコンテナ イメージを使用するため、フロントエンド プロキシに必要な作業はコンテナとサービス自体の構成だけです。

Nginx Ingress コンテナを構成する

コンテナ イメージは nginx で、Docker Hub で入手できます。ほぼそのままで使用できますが、プロキシ サービスとして実行するように構成し、サイドカー コンテナが localhost でリッスンするポートにプロキシ リクエストを配信する必要があります。このページの例では、リクエストとレスポンスで gzip 圧縮も有効になっています。

この構成は、/etc/nginx/conf.d/nginx.conf にマウントされたテキスト ファイルを使用して提供されます。コンテナ内のファイルは直接編集できないため、構成ファイルを含む /etc/nginx/conf.d/ にボリュームをマウントする必要があります。Cloud Run で実行されているコンテナ内の特定の場所にファイルをマウントする方法の 1 つは、ファイルの内容を Secret Manager のシークレットに保存し、そのシークレットを選択した場所にマウントすることです。

ローカルマシンの現在のディレクトリにある nginx.conf という名前のファイルに次の内容をコピーします。


server {
    # Listen at port 8080
    listen 8080; 
    # Server at localhost
    server_name _;
    # Enables