IPv4・IPv6判別と簡易IPv6→IPv4変換 [Apache]
World IPv6 DayにちなんでIPv6の話題。
フロントにApacheのIPv6対応HTTPサーバを使っている分には、IPv4/IPv6どちらのアクセスからでも基本的にはWebアプリケーションは動く。
ただしアプリがREMOTE_ADDRを参照してIPアドレスをパースする処理を持っている場合、IPv6アドレスを考慮していない場合はエラーになったり、想定外の動きをする可能性がある。
(※ApacheではIPv6でもアクセス元IPアドレスはREMOTE_ADDRヘッダに入ってくる)
そんなシステムでとりあえずアプリの改修なしでIPv6でアクセスを処理したい場合、ApacheでIPv4アドレスである127.0.0.1にプロキシしてやることで強制的にREMOTE_ADDRをIPv4アドレスである127.0.0.1にすることができる。
アドレスの処理自体がアプリケーションのキモである場合は当然ながら意味のない処理になってしまうが、IPv6アドレスのアドレス表記にはコロン(:)がに含まれるので上記のような記述でIPv4アドレスからのアクセスはそのまま処理、IPv6アドレスからのアクセスはIPv4アドレスに変換して処理することができる。
さすがにこれを運用環境でやることはあまりないだろうけど、実験や応急処置としてはお手軽な対処方法かと。
フロントにApacheのIPv6対応HTTPサーバを使っている分には、IPv4/IPv6どちらのアクセスからでも基本的にはWebアプリケーションは動く。
ただしアプリがREMOTE_ADDRを参照してIPアドレスをパースする処理を持っている場合、IPv6アドレスを考慮していない場合はエラーになったり、想定外の動きをする可能性がある。
(※ApacheではIPv6でもアクセス元IPアドレスはREMOTE_ADDRヘッダに入ってくる)
そんなシステムでとりあえずアプリの改修なしでIPv6でアクセスを処理したい場合、ApacheでIPv4アドレスである127.0.0.1にプロキシしてやることで強制的にREMOTE_ADDRをIPv4アドレスである127.0.0.1にすることができる。
RewriteEngine On
RewriteCond %{REMOTE_ADDR} :
RewriteRule ^(.*)$ http://127.0.0.1/$1 [P,L]
(※VirtualHostを使っている場合はヘッダやListenアドレス/ポートなどの考慮が必要)
アドレスの処理自体がアプリケーションのキモである場合は当然ながら意味のない処理になってしまうが、IPv6アドレスのアドレス表記にはコロン(:)がに含まれるので上記のような記述でIPv4アドレスからのアクセスはそのまま処理、IPv6アドレスからのアクセスはIPv4アドレスに変換して処理することができる。
さすがにこれを運用環境でやることはあまりないだろうけど、実験や応急処置としてはお手軽な対処方法かと。
コメント 0