【解決方法】Dockerのnginx-proxyを経由するとアクセス元のIPが正しく取得できない件について

CentOSUnixDockernginxエラー解消
【解決方法】Dockerのnginx-proxyを経由するとアクセス元のIPが正しく取得できない件について
Memo
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

リバースプロキシを立てると、アクセス元の正しいIPが取得できなかったため 取得させるための設定をメモします。

環境

  • CentOS 7.4
  • Docker 18.03

概要

docker-nginx-proxy

Dockerのnginx-proxyのコンテナをリバースプロキシとして設置し
それぞれのコンテナへ別々のホストを立てリクエストを振り分けました。

webブラウザからa.hoge.jpへアクセスすると
アクセス元のIPがnginx-proxyのIPからアクセスしたことになってしまい
適切なアクセス元を取得出来ませんでした。

nginx-proxy
https://github.com/jwilder/nginx-proxy

解決方法

以下の対応で解決しました。

  • nginx-proxyの設定にX-Forwarded-Forを設定
  • a.hoge.jp側の設定

nginx-proxyの設定にX-Forwarded-Forを設定

X-Forwarded-Forとは?

HTTPヘッダの一つでロードバランサやプロキシを経由する際に
クライアントの送信元IPアドレスを特定する際のデファクトスタンダードです。

設定ファイルに下記を追記します。

/etc/nginx/conf.d/default.conf
server { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }

a.hoge.jp側の設定

x-forwarded-forは偽装可能なので、信頼できるところ以外からは
real_ip_headerを使わないようにするための設定です。

<nginx-proxyのIP>はnginx-proxyのIPに置き換えてください。

/etc/nginx/conf.d/default.conf
server { set_real_ip_from <nginx-proxyのIP>; real_ip_header X-Forwarded-For; }

終わりに

最後までご覧いただきありがとうございます。
この記事では【解決方法】Dockerのnginx-proxyを経由するとアクセス元のIPが正しく取得できない件についてについて紹介させていただきました。

これからも皆様の開発に役立つ情報を提供していきたいと考えています。
今後ともよろしくお願いいたします。