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

Alibaba Cloud DNS:自己ホスト型 Nginx リバースプロキシを使用した HTTPS リクエストの転送とポートの非表示

最終更新日:Dec 05, 2025

Elastic Compute Service (ECS) インスタンスに Nginx リバースプロキシをデプロイすることで、リクエスト転送ルールを制御し、HTTPS プロトコルの URL 転送やポートプロキシなどの機能を実現できます。このソリューションは、HTTPS 経由の URL 転送をサポートせず、DNS レコードを特定のポートに解決する設定ができないという Alibaba Cloud DNS の制限を解決します。標準的な DNS 解決のシナリオでは、DNS レコードを追加できます。

利用シーン

Alibaba Cloud DNS の解決設定には、特定のシナリオで制限があります:

  • プロトコルの制限:Alibaba Cloud DNS の URL 転送機能は、HTTPS から HTTPS へのリクエスト転送をサポートしていません。これにより、クライアントのアクセスが失敗します。

  • ポートの制限:標準の DNS プロトコルでは、ドメイン名は IP アドレスにのみ解決でき、特定のポートには解決できません。バックエンドアプリケーションが 3000 などの非標準ポートを使用している場合、ユーザーは http://www.example.com:3000 のように URL に手動でポート番号を追加してアプリケーションにアクセスする必要があります。

ソリューションアーキテクチャ

  • 元のパス:クライアントはドメイン名を使用してアクセスリクエストを開始します。ローカル DNS が再帰クエリを実行して、バックエンドサービスの IP アドレスを取得します。その後、クライアントはその IP アドレスでバックエンドサービスに直接アクセスします。

  • 新しいパス:自己ホスト型の Nginx リバースプロキシをデプロイすると、Nginx がトラフィックのエントリポイントとして機能し、リクエストを転送します。全体的なアクセスパスは次のようになります:

    1. クライアントはドメイン名を使用してアクセスリクエストを開始します。ローカル DNS が再帰クエリを実行します。このクエリは最終的に、権威 DNS サーバーから Nginx サーバーのパブリック IP アドレスを取得します。

    2. クライアントはこのパブリック IP アドレスに HTTP/HTTPS リクエストを送信します。

    3. Nginx サーバーがリクエストを受信します。Nginx は設定ファイル内の転送ルールを使用して、リクエストを正しいバックエンドアプリケーションにプロキシします。これらのルールは、アクセスされているドメイン名を含む Host リクエストヘッダーに基づいています。

    4. バックエンドアプリケーションがリクエストを処理し、Nginx に応答を返します。Nginx はその後、最終的な応答をクライアントに配信します。

操作手順

このトピックでは、Alibaba Cloud Linux 3 オペレーティングシステムを実行する Elastic Compute Service (ECS) インスタンスを例に、Nginx のデプロイと設定方法を説明します。すでに Nginx をデプロイしている場合は、ステップ 3:さまざまな利用シーンに応じた Nginx の設定 に進んでください。

ステップ 1:ECS 環境の準備

  1. ECS インスタンスを作成します。詳細については、「ウィザードを使用した ECS インスタンスの作成」をご参照ください。

    • オペレーティングシステム:Alibaba Cloud Linux 3 を選択します。

    • ネットワーク:パブリック IP アドレスが割り当てられていることを確認します。

  2. インスタンスのセキュリティグループ設定で、インバウンドルールを追加して、TCP ポート 2280443 のトラフィックを許可します。これらのポートは、Secure Shell (SSH) リモート接続および Web サービスに使用されます。

ステップ 2:Nginx のインストールと起動

  1. SSH クライアントを使用して ECS インスタンスにログインします。

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

    sudo yum install -y nginx
  3. Nginx サービスを起動し、起動時に自動的に開始するように設定します。

    sudo systemctl start nginx
    sudo systemctl enable nginx
  4. Nginx サービスの状態を確認し、実行中であることを確認します。

    sudo systemctl status nginx

    ステータスが active (running) であれば、サービスは正常に起動しています。

  5. Nginx の設定を変更した後、次のコマンドを実行して変更を適用します。このコマンドは、既存の接続を中断することなく設定を再読み込みします。

    sudo systemctl reload nginx

ステップ 3:さまざまな利用シーンに応じた Nginx の設定

Nginx のコア設定ファイルは /etc/nginx/nginx.conf にあります。しかし、ベストプラクティスとして、各サイトの設定ごとに個別の .conf ファイルを作成し、これらのファイルを /etc/nginx/conf.d/ フォルダに保存することが推奨されます。以下のセクションでは、さまざまな利用シーンに応じた設定例を示します。

利用シーン 1:HTTPS プロトコルの URL 転送

Alibaba Cloud DNS は、HTTPS から HTTPS への URL 転送をサポートしていません。これは、サービスにカスタム SSL 証明書をアップロードできないためです。自己ホスト型の Nginx インスタンスを使用すると、ソースドメイン名に有効な SSL 証明書を設定し、URL 転送ルールをセットアップできます。

  • URL リダイレクト (明示的転送)

    https://example.com から https://aliyun.com へのアクセスを恒久的にリダイレクトします。ブラウザのアドレスバーがリダイレクト先のアドレスに変わります。/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 サイトへのリクエストを https://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:ドメイン名の特定ポートへの解決

この設定により、3000 などの非標準ポートで実行されているアプリケーションに、標準のポート 80 を介してアクセスできるようになります。これにより、DNS の A レコードがポートを指定できないという問題が解決されます。/etc/nginx/conf.d/port_mapping.conf ファイルに次の内容を追加します:

# example.com を介してローカルポート 3000 のサービスにアクセス
server {
    listen 80;
    server_name example.com;

    location / {
        # リクエストをローカルホスト (localhost) のポート 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 リバースプロキシサービスをデプロイおよび設定した後、プロキシされるサービスとそれに関連するドメイン名の DNS 解決を設定する必要があります。

  1. ドメイン名を取得します。ドメイン名をお持ちでない場合は、Alibaba Cloud ドメイン から購入できます。ドメイン名に関連付けられたサイトが中国本土にデプロイされている場合は、事前に ICP 登録 を完了する必要があります。

  2. Nginx リバースプロキシがデプロイされているサーバーのパブリック IP アドレスを取得します。この例では、ECS インスタンスのパブリック IP アドレスです。

    image

  3. Alibaba Cloud DNS - パブリックゾーン に移動し、対象のドメイン名を見つけます。

  4. DNS レコードを追加または変更します。

    1. 以前に DNS レコードを設定していない場合は、DNS レコードを追加します。Nginx で設定されている各ドメイン名 (例:example.com) に対して A レコードを作成し、そのレコードを ECS インスタンスのパブリック IP アドレスに向けます。

    2. DNS レコードが既に存在する場合は、その値を Nginx サーバーのパブリック IP アドレスに変更します。注意:DNS レコードを変更した後、変更が有効になるまでに 5~10 分かかる場合があります。

      image

コストとリスク

  • コスト構成:主なコストは、Nginx の実行に必要な ECS インスタンスです。コストは、選択するインスタンスタイプ、リージョン、および課金方法によって異なります。Nginx はオープンソースソフトウェアであり、無料で使用できます。

  • リスクとメンテナンス:自己ホスト型リバースプロキシサービスの運用保守 (O&M) はお客様の責任となります。これには、オペレーティングシステムと Nginx のセキュリティパッチの定期的な更新、サービスの状態監視、設定ファイルのバックアップが含まれます。不適切な設定やメンテナンスの欠如は、サービス中断やセキュリティ脆弱性を引き起こす可能性があります。

  • 本番環境に関する推奨事項:本番環境では、Nginx のセキュリティ設定を強化し、監視およびログ分析システムを確立することを推奨します。

よくある質問

Alibaba Cloud DNS はポート解決をサポートしていますか?

ドメイン名を別のサイトに向けるにはどうすればよいですか?