B級システムエンジニアの備忘録

インフラ・プログラミングなんでもやるぞ雑用エンジニアブログ

CentOS Linux サーバー システム・技術情報

reverse proxy(リバースプロキシ)でプロキシされる側でアクセス元IPを使用する方法(Nginx→Apache)

投稿日:

最近はリバースプロキシーサーバーを立てセキュリティ強化対策やコンテンツキャッシュ等をして負荷分散をするのが主流になっていますが、いざ自分でしてみるとIP制御が上手くいかなくなりました(汗)
というのもプロキシされる側(プロキシ配下)ではフロントにプロキシサーバーがあり、
自分に渡ってくるIPはプロキシサーバーのIPなわけです。。。
こんな初歩的なことで躓いてしまうとはw
しかし、Apache2.4ではmod_remoteipなるものが!!!
※自分の環境ではyumで入れた時点で標準モジュールであるmod_remoteipが入っていいましたので、入っていない場合は後日マニュアルを足そうと思います。
Apache2.0だとmod_extract_forwardedで、
Apacheが2.2だとmod_rpaf等でApache側でできるようです。
ただ、この二つ既に更新、修正が停止しており、使うのには少々不安な気もします。。。
ということで備忘録替わりに記事にしたいと思います。

検証環境

OS CentOS6.7
Apache 2.4.16(yumインストール)
Nginx 1.8.0(yumでインストール)

モジュールの有効化

Nginxの設定
$ vim /etc/nginx/nginx.conf
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #ここで配下のサーバーへ渡す元IP情報をヘッダーへ付加
proxy_pass http://localhost:8080;
}
$ service nginx reload
Apacheの設定
$ vim /etc/httpd/conf/httpd.conf
LoadModule remoteip_module modules/mod_remoteip.so #モジュール読み込み
RemoteIPHeader X-Forwarded-For #Nginxから渡される元IP X-Forwarded-For
service httpd restart

最後に

今回は、元々フロントにApacheがある状態でアプリが動いていた為、
このような方法をとりましたが、リバースプロキシ前提でアプリのプログラムが動いていれば、
remote_addrではなくX-Forwarded-Forで組み込んでいるとおもいますので、
この設定は不要かもしれません。
NginxでApacheへX-Forwarded-Forを渡すだけでいいので。。。
ただ、すでに出来上がってしまったアプリの大量のソースを置き換えるのは骨が折れますよね!
そんなときはぜひこの方法でお試しください!

336

336

-CentOS, Linux, サーバー, システム・技術情報

Copyright© B級システムエンジニアの備忘録 , 2021 All Rights Reserved.