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にアクセスするためのリバースプロキシを設定します。
手順
ECSインスタンスを作成します。
この例では、Ubuntu 18.04 (64ビット) を実行するECSインスタンスが作成されます。 アクセスするECSインスタンスとバケットが同じリージョンにあることを確認します。
詳細は、インスタンスの作成をご参照ください。
ECS インスタンスに接続します。
ECSインスタンスへの接続方法については、 「ECSコンソール (エクスプレスバージョン) を使用したECSインスタンスの作成と管理」をご参照ください。
次のコマンドを実行して、APTリポジトリを更新します。
sudo apt-get update
次のコマンドを実行してNGINXをインストールします。
sudo apt-get install nginx
デフォルトでは、NGINXファイルは次のパスにインストールされます。
ディレクトリ
説明
/usr/sbin/nginx
NGINX実行可能ファイルを格納します。
/etc/nginx
設定ファイルを格納します。
/usr/share/nginx
静的ファイルを格納します。
/var/log/nginx
ログを保存します。
次のコマンドを実行して、nginx.confファイルを開きます。
sudo vi /etc/nginx/nginx.conf
次のパラメーターを参照して、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はリクエストボディ全体の受信を待たずに、受信したデータを直ちに転送します。 これは、高いリアルタイムパフォーマンスを必要とするシナリオに適しています。次のコマンドを実行して、NGINX実行可能ファイルのディレクトリに移動します。
cd /usr/sbin/
次のコマンドを実行してNGINXを起動します。
sudo ./nginx
ECSインスタンスのTCPポート80を有効にします。
デフォルトでは、NGINXはTCPポート80を使用します。 したがって、ECSインスタンスのセキュリティグループルールを設定するときは、TCPポート80を有効にする必要があります。
詳細については、「セキュリティグループルールの追加」をご参照ください。
ECSインスタンスのパブリックIPアドレスにオブジェクトパスを追加して、OSSリソースにアクセスします。
この例では、デフォルトのドメイン名が使用されます。 ローカルブラウザを使用してOSSリソースにアクセスすると、OSSリソースが自動的にダウンロードされます。 アクセスするOSSリソースをプレビューする場合は、proxy_passパラメーターを設定するときにカスタムドメイン名を使用する必要があります。
説明オブジェクトアクセス制御リスト (ACL) が非公開の場合、オブジェクトURLに署名する必要があります。 詳細については、「URLにV1署名を含める」をご参照ください。