2017-07-28 9 views
1

ホスト名が「ip-10-176-225-83.us-west-2.compute.internal」の1つのec2インスタンスで4つのWebアプリケーションを実行しています"ポート8888,8088,8042、および8890にあります。これらのWebアプリケーションはすべてHTTP上にあります。ポート番号に基づいてバックエンドサーバーへのリバースプロキシ要求にNginxを設定します

私たちのセキュリティチームは、onpremiseからAWSへのhttpポートを開くことを許可していません。 HTTPSリクエストを受け取り、HTTPを使用してバックエンドWebサーバーに転送する同じVPCサブネームでリバースプロキシを設定することを提案します。

私はホスト名 "ip-10-176-225-84.us-west-2.compute.internal"と同じサブネット内に新しいインスタンスを作成し、Niginx Serverをインストールしました。

それは

https://ip-10-176-225-84.us-west-2.compute.internal:8080コールhttp://ip-10-176-225-83.us-west-2.compute.internal:8080以下のように行い、他のポートのために戻って

同じ

答えて

2

TLに応答するようにどのように私はnginxのを設定することができます; DR:何を達成するためのいくつかの方法があります。ここを探しています。

が可能attack surface削減の原則に付着し、それが絶対に必要な場合を除き、パブリックインターネットにポートをさらさないために、通常は最善です。リバースプロキシは、これを達成するための優れた方法です。一般的に、あなたは、バックエンドのWebアプリケーションのすべてが逆ポート443でHTTPSを介してプロキシされるにしたいと思い、あなたはどちらか、各サービスにアクセスします。

  • などapp1.example.comapp2.example.comまたはなど異なるホスト名、とそのようなあなたが選択した方法に応じてexample.com/app1example.com/app2

など、さまざまなサブディレクトリ、と

  • 、構成がいずれかの以前のシナリオのために複数のserverブロックで、大きく異なる可能性があり、後者の場合はlocationブロックです。どちらの場合でも、upstreamproxy_passの指示文を使用します。私は両方のシナリオの例を挙げます。


    複数ホスト

    あなたはフロントエンドのために複数のホスト名(または複数のポート)を使用している場合は、あなたが彼らのために複数のserverブロックを作成する必要があります:

    # Nginx reverse-proxy configuration 
    upstream app1 { 
        server 10.176.225.83:8888; 
    } 
    
    upstream app2 { 
        server 10.176.225.83:8088; 
    } 
    
    upstream app3 { 
        server 10.176.225.83:8042; 
    } 
    
    upstream app4 { 
        server 10.176.225.83:8890; 
    } 
    
    server { 
        listen 443 ssl; 
        server_name app1.example.com; 
    
        ssl_certificate_key /path/to/your/ssl-key.pem; 
        ssl_certificate /path/to/your/ssl-cert.pem; 
    
        location/{ 
         proxy_pass http://app1; 
        } 
    } 
    
    server { 
        listen 443 ssl; 
        server_name app2.example.com; 
    
        ssl_certificate_key /path/to/your/ssl-key.pem; 
        ssl_certificate /path/to/your/ssl-cert.pem; 
    
        location/{ 
         proxy_pass http://app2; 
        } 
    } 
    
    server { 
        listen 443 ssl; 
        server_name app3.example.com; 
    
        ssl_certificate_key /path/to/your/ssl-key.pem; 
        ssl_certificate /path/to/your/ssl-cert.pem; 
    
        location/{ 
         proxy_pass http://app3; 
        } 
    } 
    
    server { 
        listen 443 ssl; 
        server_name app4.example.com; 
    
        ssl_certificate_key /path/to/your/ssl-key.pem; 
        ssl_certificate /path/to/your/ssl-cert.pem; 
    
        location/{ 
         proxy_pass http://app4; 
        } 
    } 
    

    ここで注意するべきいくつかのこと:

    • upstreamディレクティブを使用して先頭にバックエンドが定義され、名前で参照できるようになりました。
      • あなたはこのようにそれを行うにはしたくない場合は、あなたがupstreamブロックを省略することができ、かつproxy_pass行は次のようになります。各アプリは異なるホスト名で提供されているのでproxy_pass http://10.176.225.83:8888;
    • それぞれが独自のserverブロックを取得します。また、それぞれが異なるポートでサービスされている場合も同様です。
    • serverブロックのssl_certificateおよびssl_certificate_keyは、証明書に複数のSANsを定義した場合、異なる証明書または同じ証明書を指すことができます。
    • 各アプリケーションは、独自のホスト名から利用できるようになるフロントエンドサーバへのすべてのポイント:
      • アプリ1:https://app1.example.com
      • アプリ2:https://app2.example.com
      • アプリ3:https://app3.example.com
      • アプリ4: https://app4.example.com

    複数ディレクトリ単一のホストとポートを使用して設定するために

    、サブディレクトリからバックエンドのアプリケーションを提供するには、複数のlocationブロックを単一serverブロックを使用することがあります:

    # Nginx reverse-proxy configuration 
    upstream app1 { 
        server 10.176.225.83:8888; 
    } 
    
    upstream app2 { 
        server 10.176.225.83:8088; 
    } 
    
    upstream app3 { 
        server 10.176.225.83:8042; 
    } 
    
    upstream app4 { 
        server 10.176.225.83:8890; 
    } 
    
    server { 
        listen 443 ssl; 
        server_name example.com; 
    
        ssl_certificate_key /path/to/your/ssl-key.pem; 
        ssl_certificate /path/to/your/ssl-cert.pem; 
    
        location /app1 { 
         proxy_pass http://app1; 
        } 
    
        location /app2 { 
         proxy_pass http://app2; 
        } 
    
        location /app3 { 
         proxy_pass http://app3; 
        } 
    
        location /app4 { 
         proxy_pass http://app4; 
        } 
    } 
    

    Aこの1で注意すべきいくつかのより多くの事:

    • 我々はまだのようにすべての4つのupstreamのサービスを、定義します前。そして、あなたが直接ルートを好むなら、あなたはそれらを省略することができます。このディレクティブは、複雑な設定の方が便利です。
    • すべてのアプリは同じホスト名から配信されているため、serverブロックを共有しますが、それぞれのサブディレクトリに対して別々のlocationブロックを持っています。
    • これらはすべて同じホスト名を共有するため、この場合はサーバー証明書に複数のSANは必要ありません。
      • アプリ1:https://example.com/app1
      • アプリ2:https://example.com/app2
      • アプリ3:https://example.com/app3
      • アプリ4:https://example.com/app4
    • 各バックエンド・アプリケーションは、フロントエンドサーバー上のサブディレクトリから利用できるようになります

    いずれかのシナリオでは10

    TLSの設定

    、あなたが該当する場合、パブリックCA、または内部PKIにより署名されたいずれかで、SSL証明書を設定する必要があります。あなたのアプリが公開される場合は、公開証明書を使用する必要があります。次に、上記のNginx設定にその場所を追加します。

    はさらに現実世界の例えば

    を読むと、あなたはそれらの元のポートにも関わらず、implements SSLreverse proxies他のいくつかのサービスを、私はGenieacs TR-069サーバー用に使用していますnginxの設定をチェックアウトすることができます443にはなりません。これは、それらを元のポートに保持したい場合に便利です。

    Nginxサイトには、逆プロキシの基本設定でdecent primerもあります。

  • 関連する問題