1

AWS Elastic BeanstalkのDockerコンテナ内にNode.jsサーバがあります。私は、リクエストヘッダーを介してユーザーのIPアドレスにアクセスしようとすると、ユーザーの実際のリモートIPアドレスを取得しないことに気付きました。代わりに、私はDockerコンテナのIPアドレス - 172.19.0.1のように見えます。元のIPが単一のコンテナのコンテナに渡されないAWSのDocker画像Elastic Beanstalk

DockerやElastic Beanstalkがどのように設定されていて、私が望む動作を得るために変更する必要があるのか​​簡単なことはありますが、何を変更する必要があるのか​​分かりません。

Dockerfileに何かがありますか? 私のコンテナをプッシュする前に、私のdocker buildコマンドの中の旗や何か? ELBまたはElastic BeanstalkのAWSの設定はいくつですか?

どこから始めればいいのでしょうか?

+0

に答えますか? 'X-Forwarded-For'? –

+0

これは役立つかもしれませんが、まだ試していません。Elastic Beanstalkでは、ロードバランサを設定し、X-Forwarded-Forフィールドを書き直さないように指示できます。http://docs.aws.amazonから抜粋してください。 com/en_us/elasticbeanstalk/latest/dg/using-features.managing.elb.html: 'ロードバランサが要求をそのまま転送するようにするには、リスナープロトコルをHTTPからTCPに変更できます。これにより、ロードバランサがヘッダー(X-Forwarded-Forを含む)を書き直すのを防ぎ、スティッキーセッションでは動作しません。 –

+0

Hapiを使用していますので、 'request.info.remoteAddress'にアクセスしようとしています – otajor

答えて

2

Node.jsのHapiでは、request.infoではなくrequest.headersでリクエストヘッダーを使用できません。 request.infoを使用すると、ネットワークレベルの情報が返されます。要求レベル情報を取得するには、request.headers[ 'X-Forwarded-For' ]のようなものを使用する必要があります。 request.headersのキーと値のペアを表示して、検索するIPアドレスを含む値にリンクされているキーを検出します。

+0

。 'headers ['x-forwarded-for']'はカンマで区切られたIPアドレスのリストで、そのうちの1つは正しいものです。 DockerがそのIPアドレスを 'request.info.remoteAddress'の下のコンテナに渡すようにする方法はありませんか? – otajor

+0

AWS EBS(Elastic Beanstalk)でDockerを使用している場合、いいえ。 Dockerデーモンは、バージョンと構成に応じて、ポートを公開するさまざまな方法を使用できます。 iptablesルールを使用して、コンテナポート、またはTCPプロキシとして動作する各コンテナのサブプロセスを公開することができます。 AWS EBSで使用されるDockerのバージョンと、ポートを公開するDockerを設定する方法によって、 'request.info.remoteAddress'で利用可能な情報が変更され、AWS EBSの動作を変更することはできません。 –

+0

クール、ありがとう。この問題を抱えている人は誰ですか - nginxやDockerではなくElastic Beanstalkの他の部分だと思います。 – otajor

1

これは既にAlexandre Fenyoによって触れられていますが、ロードバランサの背後にいる場合、これはおそらくあなたのアプリにクライアントIPとして渡されているものでしょう。

real_ip_header: X-Forwarded Forreal_ip_recursive: onを設定するようにnginxを設定できます。これは、nginxがあなたが受信しているIPのリストをスキャンし、最初の信頼できないIPとしてクライアントを設定することを意味します。また、ロードバランサのCIDRブロックである信頼できるIPのリストを渡す必要があります。

あり、より詳細な説明だとリクエストヘッダを使用すると、クライアントのIPで検索しましたhere

関連する問題