Playframeworkでしこしこ作っていたアプリケーションが大体形になったので、
自鯖へデプロったところ、アクセスがすべて同一IPになってしまったので対策をメモ。
■初めのサーバ構成
dockerコンテナ
↓
↓ port 80->80 /tcp
↓
Nginx
↓
↓ port 80->9000 /tcp
↓ proxy_pass http://localhost:9000
↓
playframeworkアプリケーション
■修正後のサーバ構成
nginx
↓ 1.
↓ port 80->8080 /tcp
↓ proxy_pass http://<コンテナのIPアドレス>:8080
↓
dockerコンテナ
↓
↓ port 8080->80 /tcp
↓
nginx
↓ 2.
↓ port 80->9000 /tcp
↓ proxy_pass http://localhost:9000
↓
playframeworkアプリケーション
上記のように修正しました。
つまり、コンテナ内で動作するアプリケーションに
到達するパケットの送信元IPアドレスが書き換えられてしまう
ことが主因だったわけです。
なので、コンテナにパケットが到達する前に
リバースプロキシとしてnginxをかましてやり、
1.の時点でX-Real-IPに $remote_addrを格納、
2.の時点でX-Forwarded-Forに$proxy_add_x_forwarded_forを格納するようにします。
そうすることで、playframeworkアプリケーションの、
play.mvc.Http.Context.current().request().getHeader("X-Forwarded-For");
で、アクセス元のIPアドレスを取得することができるわけです。
原因がわからなくて丸一日悩んでました・・・(小声)
1. 無題
多重起動のツールがダウンロード数700くらいいったのはいいのですが、
駅でBANされたなどの報告があるみたいなのですが、自分はBANないのですが、
karakasaさんはBANなど大丈夫でしょうか?
もしあまりにもBANが多い場合は公開停止するかもです。
一応報告したかったのでしました。