私はウェブ上で見つかった以前の提案を検討/試みましたが、役に立ちませんでした。
現在、Nginxリバースプロキシの前にELBセットアップがあり、3つの異なるWebアプリ(EC2で実行)の前にある3つの異なるELBにトラフィックを渡します。最初のELB + Revプロキシに着信するトラフィックが常にSSLであることを確認する必要があります。次に、revプロキシは、ルートに応じてさまざまなアプリにルーティングします。
これが私のnginx/sites-available /example.confファイルのスニペットです:
server {
listen 80;
server_name staging.example.com;
return 301 https://staging.example.com$request_uri;
}
server {
listen 443 ssl;
server_name staging.example.com;
ssl_certificate /location
ssl_certificate_key /location
location /app1 {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_Host;
proxy_pass http://ELB
}
}
上記を使用し、Webで見つかった以前の情報を試すと、一度実装すると、最初のELBが機能しなくなります。次に、直接revプロキシにアクセスした場合、トラフィックは通過しませんでしたが、ページはエラーにならず、空白になります。
質問:1。上記のリビジョンプロキシ設定が正しいと仮定すると、トラフィックがhttpsになり、ELB/Revプロキシに入ると、https経由で他のELBに進みますか?言い換えると、これらのELBはインバウンド443を開く必要がありますか、それともトラフィックがhttpに切り替わるときに80が機能しますか? 2.ロケーション/ app1構成内の設定、特にプロキシ設定を変更する必要がありますか?
まず、私があなたのデザインを正しく理解していることを確認させてください。
--- HTTPS --> ELB -> nginx --- HTTP ---> ELB1 --> server1
--- HTTP ---> ELB1 --> server2
--- HTTP ---> ELB1 --> server3
あれは正しいですか?
仮定上記は正しい場合、HTTPSのみがその最初の/フロントエンドEBLに入るようにするには、そのフロントエンドELBを構成できますポート443にHTTPSリスナーがあります。それだけです。
最初の質問として、ELBからバックエンドサーバー(frontendnginx
)に送信されるリクエストはHTTPになります。バックエンド接続にSSLを使用するようにELBを構成するには、邪魔にならないようにする必要があります。
つまり、バックエンドELBは、HTTPリクエストに対してポート80のリスナーのみを必要とします。 (またはポート8080、またはこれらのバックエンドELBに使用させたいポート。)
私が追加するかもしれない1つの提案は、別個の「frontend-elb」セキュリティグループと別個の「backend-elb」セキュリティグループを作成することです。フロントエンドELB(およびフロントエンドnginx
インスタンス!)は「frontelb-elb」セキュリティグループを使用する必要があり、バックエンドELB(およびバックエンドwebappインスタンス!)はすべて「backend-elb」セキュリティグループを使用する必要があります。 「frontend-elb」セキュリティグループは、どこからでも着信要求を許可する必要があります(もちろん、サービスを公開したい場合)。ただし、「backend-elb」セキュリティグループは、「frontend-elb」セキュリティグループから着信接続のみを許可するである必要があります。これにより、Webアプリに到達するための唯一の方法がそのフロントエンドELBを経由するようになり、HTTPS要求のみがWebアプリに到達するようになります。
nginx
プロキシ構成については、私thinkは問題ないようです。ただし、AWS ELBは自動的にX-Forwarded-For
(およびX-Forwarded-Proto
)ヘッダーを設定することを指摘しておく必要があります。 nginx
構成で明示的に設定する必要がない場合があります。
お役に立てれば!