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

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

最終更新日:Feb 25, 2025

DNS 解決を使用して Object Storage Service (OSS) バケットにアクセスするために使用される IP アドレスは動的に変化します。ただし、特定のシナリオでは、静的 IP アドレスを使用してバケット内のオブジェクトにアクセスする必要がある場合があります。この場合、Elastic Compute Service (ECS) インスタンスで NGINX リバースプロキシを設定して、静的 IP アドレスを使用してバケットにアクセスできます。リバースプロキシのパブリック IP アドレスのポート 80 を使用して、バケット内のオブジェクトにアクセスできます。このようにして、静的 IP アドレスを介してオブジェクトにアクセスできます。

メリット

ECS インスタンスで NGINX リバースプロキシを設定すると、リバースプロキシの静的 IP アドレスを使用して、バケットが配置されているリージョンの内部エンドポイントにアクセスリクエストを転送できます。メリットは以下のとおりです。

  • 静的 IP アドレスアクセス: 静的 IP アドレスを使用したアクセスは、バケットのデフォルトドメイン名の IP アドレスが動的に変化するという問題を解決し、企業のファイアウォールホワイトリストとサードパーティシステムコールの要件を満たすために静的 IP アドレスを使用する必要があるシナリオに適しています。

  • セキュリティの強化: バケットの名前とバケットが配置されているリージョンは非表示になり、ECS インスタンスのドメイン名または IP アドレスのみが公開されるため、OSS を直接公開するリスクが軽減されます。

  • コストの最適化: ECS インスタンスは、バケットが配置されているのと同じリージョンに配置され、同じ内部ネットワークを介してバケットと通信できるため、データ転送コストを削減できます。

手順

Ubuntu

説明

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

手順 1: NGINX をインストールする

  1. ECS インスタンスを作成して接続します。詳細については、「ECS コンソールのカスタム起動タブでインスタンスを作成し、インスタンスを管理する」をご参照ください。

  2. ECS インスタンスの TCP ポート 80 を有効にします。 デフォルトでは、NGINX は TCP ポート 80 を使用します。したがって、ECS インスタンスのセキュリティグループルールを設定する場合は、TCP ポート 80 を有効にする必要があります。詳細については、「セキュリティグループルールを追加する」をご参照ください。

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

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

    sudo apt-get install nginx

手順 2: NGINX を設定する

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

    sudo vi /etc/nginx/nginx.conf
  2. 次のパラメータを参照して、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;
         }  
    }

    パラメータ

    説明

    server_name

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

    proxy_pass

    バケットのエンドポイントを指定するプロキシサーバーの IP アドレス。

    • ECS インスタンスとアクセスするバケットが同じリージョンにある場合は、バケットの内部エンドポイントを指定します。例: http://bucketname.oss-cn-beijing-internal.aliyuncs.com

    • ECS インスタンスとアクセスするバケットが異なるリージョンにある場合は、バケットのパブリックエンドポイントを指定します。例: http://bucketname.oss-cn-beijing.aliyuncs.com

    エンドポイントの詳細については、「エンドポイント」をご参照ください。

  3. Esc キーを押し、 :wq と入力して変更を保存し、 nginx.conf ファイルを閉じます。

  4. 次のコマンドを実行して、 nginx.conf ファイルのステータスをテストします。

    nginx -t
  5. 次のコマンドを実行して NGINX を再起動し、設定を有効にします。

    systemctl restart nginx

CentOS

次の手順をスキップし、[テンプレートベースのクイックデプロイ] を使用して CentOS ECS インスタンスにリバースプロキシをデプロイできます。

説明

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

手順 1: NGINX をインストールする

  1. ECS インスタンスを作成して接続します。詳細については、「ECS コンソールのカスタム起動タブでインスタンスを作成し、インスタンスを管理する」をご参照ください。

  2. ECS インスタンスの TCP ポート 80 を有効にします。 デフォルトでは、NGINX は TCP ポート 80 を使用します。したがって、ECS インスタンスのセキュリティグループルールを設定する場合は、TCP ポート 80 を有効にする必要があります。詳細については、「セキュリティグループルールを追加する」をご参照ください。

  3. 次のコマンドを実行して、NGINX をインストールします。

    sudo yum install -y nginx

手順 2: NGINX を設定する

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

    sudo vi /etc/nginx/nginx.conf
  2. 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;
         }  
    }

    パラメーター

    説明

    server_name

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

    proxy_pass

    バケットのエンドポイントを指定するプロキシサーバーの IP アドレス。

    • アクセスする ECS インスタンスとバケットが同じリージョンにある場合は、バケットの内部エンドポイントを指定します。例: http://bucketname.oss-cn-beijing-internal.aliyuncs.com

    • アクセスする ECS インスタンスとバケットが異なるリージョンにある場合は、バケットのパブリックエンドポイントを指定します。例: http://bucketname.oss-cn-beijing.aliyuncs.com

    エンドポイントの詳細については、「エンドポイント」をご参照ください。

  3. Esc キーを押して「:wq」と入力し、変更を保存して nginx.conf ファイルを閉じます。

  4. nginx.conf ファイルのステータスをテストするには、次のコマンドを実行します。

    nginx -t
  5. 構成を有効にするには、次のコマンドを実行して NGINX を再起動します。

    systemctl restart nginx

Windows

説明

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

手順 1: NGINX をインストールする

  1. ECS インスタンスを作成して接続します。詳細については、「ECS コンソールのカスタム起動タブでインスタンスを作成して管理する」をご参照ください。

  2. ECS インスタンスの TCP ポート 80 を有効にします。 デフォルトでは、NGINX は TCP ポート 80 を使用します。そのため、ECS インスタンスのセキュリティグループルールを構成する際に、TCP ポート 80 を有効にする必要があります。詳細については、「セキュリティグループルールを追加する」をご参照ください。

  3. NGINX パッケージをダウンロードして解凍します。 この例では、NGINX 1.19.2 を使用します。

手順 2: NGINX を構成する

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

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

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

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

    server {
            listen 80;
            server_name 47.**.**.73; 
    
            location / {
                proxy_pass http://bucketname.oss-cn-beijing-internal.aliyuncs.com;            
                proxy_http_version 1.1;
         }  
    }

    パラメーター

    説明

    server_name

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

    proxy_pass

    バケットのエンドポイントを指定するプロキシサーバーの IP アドレス。

    • ECS インスタンスとアクセスするバケットが同じリージョンにある場合は、バケットの内部エンドポイントを指定します。例: http://bucketname.oss-cn-beijing-internal.aliyuncs.com

    • ECS インスタンスとアクセスするバケットが異なるリージョンにある場合は、バケットのパブリックエンドポイントを指定します。例: http://bucketname.oss-cn-beijing.aliyuncs.com

    エンドポイントの詳細については、「エンドポイント」をご参照ください。

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

結果の確認

ECS インスタンスのパブリック IP アドレスに公開読み取りまたは公開読み書きのオブジェクト パスを追加して、オブジェクトにアクセスできます。オブジェクトにアクセスできる場合、構成は成功しています。たとえば、http://ECS パブリック IP アドレス/demo.png を使用して demo.png オブジェクトにアクセスすると、次の結果が返されます。

説明

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

共通パラメーター

ビジネスシナリオに基づいて nginx.conf ファイルの HTTP モジュールを変更するには、次のコードを参照できます。

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

はい

プロキシサーバーの IP アドレス。バケットのエンドポイントを指定します。

  • アクセスする ECS インスタンスとバケットが同じリージョンにある場合は、バケットの内部エンドポイントを指定します。例: http://bucketname.oss-cn-beijing-internal.aliyuncs.com

  • アクセスする ECS インスタンスとバケットが異なるリージョンにある場合は、バケットのパブリックエンドポイントを指定します。例: http://bucketname.oss-cn-beijing.aliyuncs.com

エンドポイントの詳細については、「エンドポイント」をご参照ください。

proxy_set_header Host

いいえ

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

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

  • 署名エラーが発生する。

  • バケットにマッピングされているカスタムドメイン名が ECS インスタンスのパブリック IP アドレスに解決され、ブラウザを使用してバケット内のイメージオブジェクトまたは Web ページオブジェクトをプレビューする必要がある。カスタムドメイン名の CNAME レコードを追加せずに、リバースプロキシが構成されているバケットにカスタムドメイン名をマッピングできます。

proxy_connect_timeout

いいえ

NGINX とバックエンドサーバー間の接続のタイムアウト期間。このパラメーターは、NGINX がバックエンドサーバーとの接続を確立するための最大タイムアウト期間を決定します。接続がタイムアウトすると、NGINX はエラーメッセージを返します。

proxy_read_timeout

いいえ

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

proxy_send_timeout

いいえ

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

proxy_set_header Connection

いいえ

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

proxy_buffering

いいえ

NGINX がバックエンドサーバーから受信したデータをキャッシュするかどうかを指定します。

パラメーターを on に設定すると、NGINX はすぐにデータをキャッシュし、キャッシュからクライアントにデータを送信します。

パラメーターを off に設定すると、NGINX はデータをキャッシュせずにすぐにクライアントにデータを送信します。これにより、レイテンシを短縮できますが、帯域幅の消費量が増加する可能性があります。

proxy_request_buffering

いいえ

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

例: ブラウザを使用してバケット内のイメージまたは Web ページオブジェクトをプレビューする

セキュリティ上の理由から、ブラウザでバケットのデフォルトドメイン名を使用してバケット内のイメージまたは Web ページオブジェクトにアクセスすると、オブジェクトがダウンロードされます。ブラウザを使用してイメージオブジェクトまたは Web ページオブジェクトをプレビューするには、オブジェクトが格納されているバケットにカスタムドメイン名をマッピングし、proxy_pass パラメーターの値にカスタムドメイン名を追加します。カスタムドメイン名をバケットにマッピングする方法の詳細については、「カスタムドメイン名をバケットのデフォルトドメイン名にマッピングする」をご参照ください。

server {
        listen 80;
        server_name 47.**.**.73; 

        location / {
            proxy_pass http://static.example.com;
            proxy_http_version 1.1;
     }  
}