22133


アクセス元のIPアドレスをELBのproxyProtocolを有効にして取得する際に  
BadRequestが発生してそもそもページが表示できません。

■ ELBのリスナー  
80(TCP) -> 80(TCP)  
443(SSL) -> 80(TCP)  
※proxyProtocolは80に対して有効にしています

■ アクセスログについて（ **個人的にはここが怪しいと思いますが、何をどう調査すればいいのかわかりません・・・** ）  
現在、 **$status** の中身が 『PROXY TCP4 .....』となっています。  
他の参考サイト様をみると、『GET ....』となるのが正常のようです。

アクセス元のIPアドレスを取りたいということが目的で、Teratailにも質問を上げています。  
<https://teratail.com/questions/26850>  
現在の設定ファイルの内容はTeratailを見ていただければと思います。

何かご存知の方がいらっしゃいましたら、ご教授願います。  
（こういう調べ方をした方がいいんじゃない？等のご助言でも有りがたいです。）

よろしくお願い致します。


CC BY-SA 3.0
2016-02-12T05:43:55.213
21998
2016-04-09T12:12:21.857
2016-02-17T07:14:01.213
9336
9336
question
aws nginx amazon-elb
nginxを使っているインスタンスでELBのproxyProtocolを有効にすると400(Bad Request)エラーが発生する


ELBのProxyプロトコルを有効にし、サーバ側でもProxyプロトコルに対応させて実現することも不可能では無いかもしれませんが、かなり特殊な方法になります。

一般的には、  
Webアプリから元のIPを知る：HTTPヘッダの X-Forwarded を確認する  
ログに元のIPを残す：WebサーバのログではなくELBのログを利用する or  
Webサーバのログ設定を変更してHTTPヘッダの X-Forwarded を追加する  
というのが簡単です。

また、sshをELBを使って振り分けさせるのは適切ではないため、sshは各EC2インスタンスそれぞれに直接アクセスするのが良いかと思います。


CC BY-SA 3.0
2016-02-12T15:37:31.837
22019
2016-04-09T12:12:21.857
2016-04-09T12:12:21.857
5959
5959
21998
answer


BadRequestの原因として、  
nginx内に80をHTTPとしてListenしているVH環境が他に存在していたからと思われます。

現在、

TCP/SSL通信をするELBは内部的に80以外の別ポートを使用し  
HTTP/HTTPS通信をするELBは内部的に80のポートを使用するように分けました。

今のところ問題なく動作しています。


CC BY-SA 3.0
2016-02-16T01:31:41.740
22133
2016-02-17T09:35:52.060
2016-02-17T09:35:52.060
8000
9336
21998
answer