

お世話になります。  
表題について、webアプリ上のとあるボタンを押した際に、  
クライアント側（私）のグローバルIPを取得し、  
RDSに登録を行うといったことをしたいのですが、  
プログラム上に以下URLをうめこんでグローバルIPを取得しているのですが、  
EC2のグローバルIP？と思われるIPが取得されてしまっている状況です。

<https://api.ipify.org/?format=json>

EC2上で動いているアプリ側でクライアントのグローバルIPを取得することは  
不可能なのでしょうか。解決方法がございましたら、  
ご教授いただけないでしょうか。よろしくお願いします。


CC BY-SA 4.0
2022-04-22T07:40:58.573
88450
2022-04-23T21:58:36.327
50785
question
javascript python3 aws vue.js
EC2上で起動しているWEBAPP側でクライアント側の接続元IP（グローバルIP）の取得する方法について


サーバー側でクライアントのIPを取得する方法について紹介します。

EC2と言っても構成は色々あります。  
ALB(ELB)を使っているか、Nginxを使っているか、Webアプリのフレームワークは何か。  
そのあたりが書かれていないため、こうです、とは書けませんが、原則的なことを回答します。

アクセス元のIPアドレスはHTTPヘッダーに乗って最終的なサーバープロセスまで届きますが、途中でロードバランサーやリバースプロキシを経由するとそのサーバーのアドレスに置き換わってしまいます。そこで、元々のIPアドレスを届けるための設定などがそういった中継サーバーの設定に用意されています。

HTTPリクエストヘッダの以下の値を参照してください。

  * REMOTE_ADDR

    * HTTP接続元アドレス
    * 直接接続しているときは、ブラウザでアクセスしている人のアドレスを指す
    * <https://datatracker.ietf.org/doc/html/rfc3875#section-4.1.8>
  * X-Forwarded-For or Forwarded

    * プロキシ等サーバー経由時に元のクライアントIPを保持する
    * プロキシ等の設定によっては保持されない
    * <https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/X-Forwarded-For>
  * X-REAL-IP

    * Nginxなどで登場する設定で、使い方はネットのあちこちで言及されているが仕様が存在しない
    * [Story behind X-Forwarded-For and X-Real-IP headers - The Matrix has you...](https://distinctplace.com/2014/04/23/story-behind-x-forwarded-for-and-x-real-ip-headers/)

以下の記事が参考になります。

  * [remote_addrとかx-forwarded-forとかx-real-ipとか - Carpe Diem](https://christina04.hatenablog.com/entry/2016/10/25/190000)
  * [python - How do I get user IP address in django? - Stack Overflow](https://stackoverflow.com/questions/4581789/how-do-i-get-user-ip-address-in-django)
  * `X-` がつくヘッダーは標準化されていないヘッダー [HTTP ヘッダー - HTTP | MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/Headers)


CC BY-SA 4.0
2022-04-23T21:58:36.327
88468
2022-04-23T21:58:36.327
806
88450
answer