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

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

最終更新日:Sep 29, 2024

Object Storage Service (OSS) バケットへのアクセスに使用されるIPアドレスが動的に変更されます。 静的IPアドレスを使用してバケットにアクセスするように、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インスタンスを作成します。

    この例では、Ubuntu 18.04 (64ビット) を実行するECSインスタンスが作成されます。 アクセスするECSインスタンスとバケットが同じリージョンにあることを確認します。

    詳細は、インスタンスの作成をご参照ください。

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

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

  3. 次のコマンドを実行して、APTリポジトリを更新します。

    sudo apt-get update
  4. 次のコマンドを実行してNGINXをインストールします。

    sudo apt-get install nginx

    デフォルトでは、NGINXファイルは次のパスにインストールされます。

    ディレクトリ

    説明

    /usr/sbin/nginx

    NGINX実行可能ファイルを格納します。

    /etc/nginx

    設定ファイルを格納します。

    /usr/share/nginx

    静的ファイルを格納します。

    /var/log/nginx

    ログを保存します。

  5. 次のコマンドを実行して、nginx.confファイルを開きます。

    sudo vi /etc/nginx/nginx.conf
  6. 次のパラメーターを参照して、nginx.confファイルのHTTPモジュールを変更します

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

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

    server {
            listen 80;
            server_name 47.**.**.73; 
    
            location / {
                proxy_pass http://bucketname.oss-cn-beijing-internal.aliyuncs.com;            
                proxy_http_version 1.1;
                proxy_set_header Host $http_host;
                proxy_connect_timeout 15s;
                proxy_read_timeout 15s;
                proxy_send_timeout 15s;
                proxy_set_header Connection "";
                proxy_buffering off;
                proxy_request_buffering off;
         }  
    }

    パラメーター

    説明

    server_name

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

    proxy_pass

    リダイレクトに使用されるドメイン名。

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

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

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

    proxy_set_headerホスト

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

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

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

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

    説明

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

    proxy_connect_timeout

    Nginxとバックエンドサーバー間の接続のタイムアウト期間。 接続がタイムアウトすると、Nginxはエラーメッセージを返します。

    proxy_read_timeout

    Nginxがバックエンドサーバーから応答を読み取るためのタイムアウト期間。 タイムアウト期間が終了する前にバックエンドサーバーからレスポンスを読み取ることができない場合、NGINXはエラーメッセージを返します。 これは、長い応答時間を必要とし得る要求を処理するために重要である。

    proxy_send_timeout

    Nginxがバックエンドサーバーにリクエストデータを送信するためのタイムアウト期間。 このパラメーターは、接続がタイムアウトする前にリクエストデータがバックエンドサーバーに送信されたとき、または明示的に閉じられたときに、Nginxがバックエンドサーバーに接続するために使用されます。

    proxy_set_header接続

    Connectionフィールドをリクエストに追加するかどうかを指定します。 リクエストヘッダーのConnectionフィールドを空の文字列に設定した場合、NGINXはConnectionヘッダーをリクエストに追加しません。 これにより、HTTP/1.1の永続的な接続の問題を防ぎ、NGINXが期待どおりにバックエンドサーバーに接続することを保証します。

    proxy_buffering

    Nginxがバックエンドサーバーから受信したデータをキャッシュするかどうかを指定します。 パラメーターをoffに設定すると、Nginxはデータをキャッシュせずにすぐにクライアントにデータを送信します。これにより、遅延が短縮されますが、帯域幅の消費も増加する可能性があります。

    proxy_request_バッファリング

    Nginxがリクエスト本文全体が完全に受信されるのを待ってからバックエンドサーバーに転送するかどうかを指定します。 パラメーターをoffに設定すると、NGINXはリクエストボディ全体の受信を待たずに、受信したデータを直ちに転送します。 これは、高いリアルタイムパフォーマンスを必要とするシナリオに適しています。

  7. 次のコマンドを実行して、NGINX実行可能ファイルのディレクトリに移動します。

    cd /usr/sbin/
  8. 次のコマンドを実行してNGINXを起動します。

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

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

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

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

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

    説明

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

関連ドキュメント