ECS インスタンス上の Nginx リバースプロキシを使用すると、Alibaba Cloud DNS がネイティブではサポートしていない HTTPS URL 転送とポートマッピングという 2 つの機能を実現できます。標準的なシナリオでは、代わりにDNS レコードを追加してください。
ユースケース
Alibaba Cloud DNS には次の制限があります。
-
プロトコルの制限:DNS サービスは SSL 証明書を管理できないため、
HTTPSからHTTPSへの URL 転送はサポートされていません。 -
ポートの制限:DNS はドメイン名を IP アドレスに解決しますが、ポートの解決は行いません。バックエンドが非標準ポート (例:3000) で動作している場合、ユーザーは URL にポートを追加する必要があります:
http://www.example.com:3000。
ソリューションアーキテクチャ
-
元のパス:クライアントは DNS を通じてドメイン名を解決し、バックエンドサービスの IP アドレスに直接接続します。
-
新しいパス:Nginx リバースプロキシを使用すると、リクエストは次のパスを経由します。
-
クライアントは DNS を通じてドメイン名を解決し、DNS は Nginx サーバーのパブリック IP アドレスを返します。
-
クライアントはこのパブリック IP アドレスに HTTP または HTTPS リクエストを送信します。
-
Nginx は
Hostヘッダーを転送ルールと照合し、適切なバックエンドサービスにリクエストをプロキシします。 -
バックエンドはリクエストを処理し、Nginx を通じてクライアントにレスポンスを返します。
-
操作手順
このチュートリアルでは、Alibaba Cloud Linux 3 を実行している ECS インスタンスを使用します。Nginx が既にデプロイされている場合は、ステップ 3:シナリオ別の Nginx 設定に進んでください。
ステップ 1:ECS 環境の準備
-
ECS インスタンスを作成します。詳細については、「ウィザードを使用したインスタンスの作成」をご参照ください。
-
オペレーティングシステム:Alibaba Cloud Linux 3 を選択します。
-
ネットワーク:インスタンスにパブリック IP アドレスを割り当てます。
-
-
セキュリティグループのインバウンドルールを追加して、ポート
22、80、443の TCP トラフィックを許可します。
ステップ 2:Nginx のインストールと起動
-
SSH クライアントを使用して ECS インスタンスにログインします。
-
次のコマンドを実行して、Nginx をインストールします。
sudo yum install -y nginx -
Nginx を起動し、システムの起動時に自動で起動するように設定します。
sudo systemctl start nginx sudo systemctl enable nginx -
Nginx が実行されていることを確認します。
sudo systemctl status nginxステータスが
active (running)の場合、サービスは正常に起動しています。 -
接続を切断せずに Nginx の設定を再読み込みします。
sudo systemctl reload nginx
ステップ 3:シナリオ別の Nginx 設定
メイン設定ファイルは /etc/nginx/nginx.conf です。推奨される方法は、/etc/nginx/conf.d/ にサイトごとに個別の .conf ファイルを作成することです。
シナリオ 1:HTTPS URL 転送
Alibaba Cloud DNS は SSL 証明書をアップロードできないため、HTTPS から HTTPS への転送をサポートしていません。Nginx を使用すると、独自の SSL 証明書をインストールし、カスタム転送ルールを定義できます。
-
URL リダイレクト (明示的な転送)
https://example.comをhttps://aliyun.comに永続的にリダイレクトします。ブラウザのアドレスバーは新しい URL に更新されます。/etc/nginx/conf.d/redirect.confに次の内容を追加します。server { listen 443 ssl http2; server_name example.com; # ソースドメイン名の SSL 証明書と秘密鍵を設定します ssl_certificate /etc/nginx/certs/example.com.fullchain.pem; ssl_certificate_key /etc/nginx/certs/example.com.key; location / { return 301 https://aliyun.com$request_uri; } } -
リバースプロキシ (暗黙的な転送)
https://example.comへのリクエストをhttp://aliyun.comにプロキシします。ブラウザのアドレスバーは変更されず、バックエンドからコンテンツが提供されます。/etc/nginx/conf.d/proxy.confに次の内容を追加します。# example.com のリクエストを aliyun.com にプロキシします server { listen 443 ssl http2; server_name example.com; # ソースドメイン名の SSL 証明書と秘密鍵を設定します ssl_certificate /etc/nginx/certs/example.com.fullchain.pem; ssl_certificate_key /etc/nginx/certs/example.com.key; location / { # リクエストをターゲットサーバーに転送します proxy_pass http://aliyun.com; # 重要な設定:Host リクエストヘッダーをターゲットサービスのドメイン名に設定し、バックエンドがリクエストを正しく処理できるようにします proxy_set_header Host "aliyun.com"; # クライアントの実際の IP アドレスを渡して、バックエンドのログ記録と分析に使用します proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
シナリオ 2:ドメイン名と特定ポートのマッピング
ポート 80 からのトラフィックを、3000 などの非標準ポートで動作するバックエンドアプリケーションにルーティングします。これにより、ユーザーは URL にポートを指定する必要がなくなります。/etc/nginx/conf.d/port_mapping.conf に次の内容を追加します。
# example.com を通じてローカルポート 3000 のサービスにアクセスします
server {
listen 80;
server_name example.com;
location / {
# リクエストをローカルホストのポート 3000 に転送します
proxy_pass http://127.0.0.1:3000;
# 元の Host リクエストヘッダーを渡して、バックエンドアプリケーションがアクセスされているドメイン名を識別できるようにします
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
ステップ 4:DNS 解決の設定
Nginx を設定した後、Nginx で設定したドメイン名の DNS レコードを追加します。
-
ドメイン名を取得します。ドメイン名をお持ちでない場合は、Alibaba Cloud Domain Names で登録してください。Web サイトが中国本土でホストされている場合は、まず ICP 备案 を完了してください。
-
Nginx を実行している ECS インスタンスのパブリック IP アドレスを取得します。
ECS コンソールの [インスタンス] ページで、対象のインスタンスを探し、[IPアドレス] 列を確認します。
-
Alibaba Cloud DNS - パブリックゾーン コンソールに移動し、対象のドメイン名を見つけます。
-
DNS レコードを追加または変更します。
-
DNS レコードが設定されていない場合は、「DNSレコードを追加」をご参照ください。Nginx で設定した各ドメイン名 (
example.comなど) の A レコードを作成し、ECS インスタンスのパブリック IP アドレスを指すように設定します。 -
DNS レコードが既に存在する場合は、その値を Nginx サーバーのパブリック IP アドレスに更新します。DNS の変更が反映されるまで 5~10 分かかる場合があります。
[レコードの追加] パネルで、[レコードタイプ] を [A -- ドメイン名をIPv4アドレスにマッピング] に、[ホストレコード] を
@に、[解析路線] を [デフォルト] に、[TTL] を [10分] に、[レコード値] を Nginx サーバーのパブリック IP アドレスに設定します。
-
コストとリスク
-
コスト:主なコストは ECS インスタンスです。料金は、インスタンスの仕様、リージョン、課金方法によって異なります。Nginx 自体は無料のオープンソースソフトウェアです。
-
リスクとメンテナンス:リバースプロキシの運用は、セキュリティパッチの適用、サービスの正常性の監視、設定のバックアップなど、お客様の責任となります。不適切な設定やメンテナンスの怠慢は、サービス停止やセキュリティの脆弱性につながる可能性があります。
-
本番環境での推奨事項:Nginx のセキュリティ設定を強化し、監視とログ分析を設定してください。