web-dev-qa-db-ja.com

IISホスト名に基づくサブドメインリバースプロキシ

3つの異なるポートで3つのセルフホストアプリケーション(IISでホストされていない)を実行するAzureの仮想マシンがあります。

以下のURLからアクセスできます。

  • my-server.cloudapp.Azure.com:8080
  • my-server.cloudapp.Azure.com:8081
  • my-server.cloudapp.Azure.com:8082

ドメイン名(my-server.company.com)を購入し、それぞれのアプリケーションを指す3つのサブドメインを作成したい

  • application-1.my-server.company.com
  • application-2.my-server.company.com
  • application-3.my-server.company.com

最初に考えたのは、仮想マシンにIISをインストールし、この記事に記載されているデフォルトのWebサイトでURL Rewriteを使用してリバースプロキシをセットアップすることです( http://weblogs.asp.net/owscott/creating-a-reverse-proxy-with-url-rewrite-for-iis )。

したがって、このシナリオでは、サブドメインごとにmy-server.cloudapp.Azure.comを指すようにCNAMEレコードを設定し、異なるポートに転送するようにリバースプロキシを構成します(808080818082)Hostヘッダーに基づきます。

これは可能ですか/これについて最善の方法ですか?

2番目の質問は、これが機能するようになったら、どうすればsslを追加できますか?

各サブドメインに独自のSSL証明書が必要ですか?その場合、上記の設定でこれをどのように機能させることができますか(各証明書をバインドするIIS Webサイトはありません)。または、my-server.company.comの証明書を使用してから、リバースプロキシでオフロードできますか?

5
kimsagro

溶液

次のようにCNAME DNSレコードを作成しました。

CNAME | application-1 | my-server.cloudapp.Azure.com
CNAME | application-2 | my-server.cloudapp.Azure.com
CNAME | application-2 | my-server.cloudapp.Azure.com

次に、Azure vmで Caddy (自動HTTPSを使用したHTTP/2 Webサーバー)を次のCaddyfileで実行します。

application-1.my-server.company.com {
    proxy / localhost:8080 {
        proxy_header Host {Host}
    }
}

application-1.my-server.company.com {
    proxy / localhost:8081 {
        proxy_header Host {Host}
    }
}

application-1.my-server.company.com {
    proxy / localhost:8082 {
        proxy_header Host {Host}
    }
}

これの美しさは、Caddyが初めて実行されるときに、すべてのサイトでHTTPSを自動的に有効にし(Let's Encryptから自動生成された証明書を使用)、すべてのHTTP要求を同等のHTTPSにリダイレクトします。

このセットアップにより、VMにIISをインストールする必要がなくなりました。

注:Caddyが機能するには、ポート80および443にインバウンドファイアウォールルールを追加する必要があります

0
kimsagro