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 をインストールする
ECS インスタンスを作成して接続します。詳細については、「ECS コンソールのカスタム起動タブでインスタンスを作成し、インスタンスを管理する」をご参照ください。
ECS インスタンスの TCP ポート 80 を有効にします。 デフォルトでは、NGINX は TCP ポート 80 を使用します。したがって、ECS インスタンスのセキュリティグループルールを設定する場合は、TCP ポート 80 を有効にする必要があります。詳細については、「セキュリティグループルールを追加する」をご参照ください。
次のコマンドを実行して、APT リポジトリを更新します。
sudo apt-get update
次のコマンドを実行して、NGINX をインストールします。
sudo apt-get install nginx
手順 2: 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; } }
パラメータ
説明
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
。
エンドポイントの詳細については、「エンドポイント」をご参照ください。
Esc キーを押し、 :wq と入力して変更を保存し、 nginx.conf ファイルを閉じます。
次のコマンドを実行して、 nginx.conf ファイルのステータスをテストします。
nginx -t
次のコマンドを実行して NGINX を再起動し、設定を有効にします。
systemctl restart nginx
CentOS
次の手順をスキップし、[テンプレートベースのクイックデプロイ] を使用して CentOS ECS インスタンスにリバースプロキシをデプロイできます。
この例では、CentOS 7.6 (64 ビット) を実行する ECS インスタンスが作成されます。ECS インスタンスとアクセスするバケットが同じリージョンにあることを確認してください。
手順 1: NGINX をインストールする
ECS インスタンスを作成して接続します。詳細については、「ECS コンソールのカスタム起動タブでインスタンスを作成し、インスタンスを管理する」をご参照ください。
ECS インスタンスの TCP ポート 80 を有効にします。 デフォルトでは、NGINX は TCP ポート 80 を使用します。したがって、ECS インスタンスのセキュリティグループルールを設定する場合は、TCP ポート 80 を有効にする必要があります。詳細については、「セキュリティグループルールを追加する」をご参照ください。
次のコマンドを実行して、NGINX をインストールします。
sudo yum install -y nginx
手順 2: 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; } }
パラメーター
説明
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
。
エンドポイントの詳細については、「エンドポイント」をご参照ください。
Esc キーを押して「:wq」と入力し、変更を保存して nginx.conf ファイルを閉じます。
nginx.conf ファイルのステータスをテストするには、次のコマンドを実行します。
nginx -t
構成を有効にするには、次のコマンドを実行して NGINX を再起動します。
systemctl restart nginx
Windows
この例では、Windows Server 2019 Datacenter 64 ビットを実行する ECS インスタンスを使用します。インスタンスとアクセスするバケットが同じリージョンにあることを確認してください。
手順 1: NGINX をインストールする
ECS インスタンスを作成して接続します。詳細については、「ECS コンソールのカスタム起動タブでインスタンスを作成して管理する」をご参照ください。
ECS インスタンスの TCP ポート 80 を有効にします。 デフォルトでは、NGINX は TCP ポート 80 を使用します。そのため、ECS インスタンスのセキュリティグループルールを構成する際に、TCP ポート 80 を有効にする必要があります。詳細については、「セキュリティグループルールを追加する」をご参照ください。
NGINX パッケージをダウンロードして解凍します。 この例では、NGINX 1.19.2 を使用します。
手順 2: NGINX を構成する
このトピックでは、デモ環境を例として使用します。データセキュリティを確保するために、実際のシナリオに基づいて HTTPS モジュールを構成することをお勧めします。詳細については、「NGINX または Tengine サーバーに SSL 証明書をインストールする」をご参照ください。
この構成方法を使用する場合、1 つのバケットに対してのみリバースプロキシを構成できます。
conf ディレクトリに移動し、メモ帳を使用して nginx.conf ファイルを開きます。
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
。
エンドポイントの詳細については、「エンドポイント」をご参照ください。
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 アドレス。バケットのエンドポイントを指定します。
エンドポイントの詳細については、「エンドポイント」をご参照ください。 |
proxy_set_header Host | いいえ | このパラメーターを指定すると、NGINX が OSS にリクエストを送信するときに、$host 値が ECS インスタンスの IP アドレスに置き換えられます。 次のシナリオでは、このパラメーターを指定する必要があります。
|
proxy_connect_timeout | いいえ | NGINX とバックエンドサーバー間の接続のタイムアウト期間。このパラメーターは、NGINX がバックエンドサーバーとの接続を確立するための最大タイムアウト期間を決定します。接続がタイムアウトすると、NGINX はエラーメッセージを返します。 |
proxy_read_timeout | いいえ | NGINX がバックエンドサーバーから応答を読み取るタイムアウト期間。タイムアウト期間が終了する前にバックエンドサーバーから応答を読み取れない場合、NGINX はエラーメッセージを返します。これは、長い応答時間を必要とする可能性のあるリクエストを処理するために重要です。 |
proxy_send_timeout | いいえ | NGINX がバックエンドサーバーにリクエストデータを送信するタイムアウト期間。このパラメーターは、リクエストデータがバックエンドサーバーに送信されるときに、接続がタイムアウトになる前、または明示的に閉じられる前に、NGINX がバックエンドサーバーに接続することを保証するために使用されます。 |
proxy_set_header Connection | いいえ | リクエストに Connection フィールドを追加するかどうかを指定します。リクエストヘッダーの |
proxy_buffering | いいえ | NGINX がバックエンドサーバーから受信したデータをキャッシュするかどうかを指定します。 パラメーターを on に設定すると、NGINX はすぐにデータをキャッシュし、キャッシュからクライアントにデータを送信します。 パラメーターを off に設定すると、NGINX はデータをキャッシュせずにすぐにクライアントにデータを送信します。これにより、レイテンシを短縮できますが、帯域幅の消費量が増加する可能性があります。 |
proxy_request_buffering | いいえ | NGINX がリクエスト本文全体が完全に受信されるまで待ってからバックエンドサーバーに転送するかどうかを指定します。パラメーターを |