すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:Windowsを実行するECSインスタンスを使用して、OSSへのアクセス用にリバースプロキシを設定する

最終更新日:Dec 20, 2023

Object Storage Service (OSS) バケットへのアクセスに使用されるIPアドレスが動的に変更されます。 静的IPアドレスを使用してOSSバケットにアクセスするように、ECS (Elastic Compute Service) インスタンスにリバースプロキシを設定できます。

背景情報

OSSはRESTful APIを使用してサービスを提供します。 バケットのデフォルトドメイン名またはバケットにマップされているカスタムドメイン名を使用して、OSSバケットにアクセスできます。 ただし、特定のシナリオでは、静的IPアドレスを使用してOSSにアクセスする必要がある場合があります。

  • セキュリティ上の理由から、社内の従業員とビジネスシステムが指定されたパブリックIPアドレスのみにアクセスできるようにアウトバウンドルールを設定する必要がある企業もあります。 ただし、OSSのバケットへのアクセスに使用されるIPアドレスは動的に変更されます。 この場合、企業は要件を満たすためにファイアウォール規則を頻繁に変更する必要があります。

  • Alibaba Finance Cloudのネットワークアーキテクチャでは、Alibaba Finance CloudからのリクエストのみがAlibaba Finance Cloudの内部ネットワーク固有のバケットにアクセスできます。 インターネットからのアクセス要求は拒否されます。

これらの問題を解決するには、ECSインスタンスを使用して、OSSにアクセスするためのリバースプロキシを設定します。

手順

  1. ECSインスタンスを作成します。

    この例では、Windows Server 2019 Datacenter 64ビットのECSインスタンスが使用されています。 アクセスするインスタンスとバケットが同じリージョンにあることを確認してください。

    ECSインスタンスの作成方法の詳細については、「ECSコンソール (エクスプレスバージョン) を使用したECSインスタンスの作成と管理」をご参照ください。

  2. ECS インスタンスに接続します。

    ECSインスタンスへの接続方法については、 「ECSコンソール (エクスプレスバージョン) を使用したECSインスタンスの作成と管理」をご参照ください。

  3. NGINXをダウンロードし、パッケージを解凍します。

    この例では、Nginx 1.19.2が使用されます。

  4. nginx.confファイルを変更します。

    重要
    • このトピックでは、デモ環境を例として使用します。 データのセキュリティを確保するため、実際のシナリオに基づいてHTTPSモジュールを設定することを推奨します。 詳細については、「NGINXまたはTengineサーバーへのSSL証明書のインストール」をご参照ください。

    • この設定方法を使用すると、1つのバケットに対してのみリバースプロキシを設定できます。

    1. confディレクトリに移動し、メモ帳を使用してnginx.confファイルを開きます。

    2. nginx.confファイルの内容を変更します。

      worker_processes 1;
      events {
          worker_connections 1024;
      }
      
      http {
          mime.typesを含めます。
          default_type application/octet-stream;
      
          keepalive_timeout 65;
          サーバー{
              80を聞く;
              server_name 47.**.**.43;
      
              error_page 500 502 503 504 /50x.html;
              location = /50x.html {
                  ルートhtml;
              }
      
             場所/{
                  proxy_pass http://bucketname.oss-cn-hangzhou-internal.aliyuncs.com;
                  # proxy_set_headerホスト $ホスト;
              }
         }
      }

      パラメーター

      説明

      server_name

      リバースプロキシサービスを提供するために使用されるIPアドレス。 このパラメーターをECSインスタンスのパブリックIPアドレスに設定します。

      proxy_pass

      リダイレクトのドメイン名。

      • アクセスするECSインスタンスとバケットが同じリージョンにある場合は、バケットの内部ドメイン名を指定します。 詳細については、「OSSドメイン名」トピックの「内部ネットワーク経由のOSSへのアクセス」セクションをご参照ください。

      • アクセスするECSインスタンスとバケットが異なるリージョンにある場合は、バケットのパブリックドメイン名を指定します。 詳細については、OSSドメイン名の「パブリックネットワーク経由のOSSへのアクセス」をご参照ください。

      • セキュリティを確保するために、ブラウザでバケットのデフォルトドメイン名を使用してバケット内のイメージオブジェクトまたはwebページオブジェクトにアクセスすると、オブジェクトがダウンロードされます。 ブラウザを使用して画像オブジェクトまたはwebページオブジェクトをプレビューするには、オブジェクトが保存されているバケットにカスタムドメイン名をマップし、そのカスタムドメイン名をproxy_passパラメーターの値に追加します。 詳細については、「カスタムドメイン名のマップ」をご参照ください。

      proxy_set_headerホスト

      このパラメーターを追加すると、NGINXがOSSにリクエストを送信するときに、$hostの値がECSインスタンスのIPアドレスに置き換えられます。

      次のシナリオでは、このパラメーターを追加する必要があります。

      • 署名エラーが発生します。

      • バケットにマップされているカスタムドメイン名は、ECSインスタンスのパブリックIPアドレスに解決されます。ブラウザーを使用して、バケット内のイメージオブジェクトまたはwebページオブジェクトをプレビューする必要があります。 カスタムドメイン名のCNAMEレコードを追加せずに、リバースプロキシが構成されているバケットにカスタムドメイン名をマッピングできます。 この場合、proxy_passパラメーターをバケットの内部ドメイン名またはパブリックドメイン名に設定できます。 詳細については、「カスタムドメイン名のマップ」をご参照ください。

      説明

      このパラメーターは、プロキシサーバーへのアクセスを要求するためにカスタムドメイン名が使用されるシナリオに適用されます。 IPアドレスを使用してプロキシサーバーへのアクセスを直接リクエストする場合は、proxy_set_header Host $hostパラメーターをnginx.confファイルに追加する必要があります。

  5. NGINX実行可能ファイルがあるディレクトリに移動します。 nginx.exeをダブルクリックしてNGINXを起動します。

  6. ECSインスタンスのTCPポート80を有効にします。

    デフォルトでは、NGINXはTCPポート80を使用します。 したがって、ECSインスタンスのセキュリティグループを設定するときは、TCPポート80を有効にする必要があります。

    詳細については、「セキュリティグループルールの追加」をご参照ください。

  7. ECSインスタンスのパブリックIPアドレスにオブジェクトパスを追加して、OSSリソースにアクセスします。

    この例では、デフォルトのドメイン名が使用されます。 ローカルブラウザを使用してOSSリソースにアクセスする場合、OSSリソースはデフォルトでダウンロードされます。 アクセスするOSSリソースをプレビューする場合は、proxy_passパラメーターを設定するときにカスタムドメイン名を使用する必要があります。

    説明

    オブジェクトアクセス制御リスト (ACL) が非公開の場合、オブジェクトURLに署名する必要があります。 詳細については、「URLへの署名の追加」をご参照ください。

参考資料