- 締切済み
公開サーバーの特定のURL、特定のポートへのリクエストを別のポートで処
公開サーバーの特定のURL、特定のポートへのリクエストを別のポートで処理したいと思います。 環境は、 OSがcentos-release-5-5.el5.centos、 Apacheがhttpd-2.2.3-43.el5.centos.3(CentOS同梱のapache2です) を使用しています。 WEBサーバーとして、特に変な事をしない通常の運用は問題なく出来るようになっています。 今回行いたい事の具体的な内容なのですが、 例として、特定のURL=www.foo.net/bar、特定のポート=12345、処理したい別ポート=80とします。 この時、対象となるリクエストは www.foo.net:12345/bar です。 上記のリクエストを受けた時、 www.foo.net:80/bar と読み替えて処理したいです。 この後、後続の処理へと続いていきます。 (具体的にはAJPコネクタ経由でtomcatのアプリが叩かれます。 AJPコネクタを利用したtomcatとの連携自体は動作の確認が取れています) また、この時、上記特定のURL,ポート以外の組み合わせではリソースにアクセスできないようにしたいです。 例として、 www.foo.net/bar www.foo.net:*(12345以外のポート)/bar www.foo.net:12345/*(bar以外の文字列) 等のリクエストを受けた場合は、後続の処理を行わず、一律HTTP403エラーとして処理したいです。 ただし、上記特定のURL,ポートと全く無関係なリソースへのアクセスには、影響を与えたくはありません。 ここで言う全く無関係なリソースとは、例として、 www.foo.net/*(bar以外の文字列) www.foo.net:*(12345以外のポート)/*(bar以外の文字列) 等です。 わりと特殊な事をしようとしているのかと思います。 色々と調べておりますが、自分が欲しい情報になかなかたどり着けず苦戦しております。 どの様に設定していけば良いか、お知恵を貸していただければ幸いです。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- t-okura
- ベストアンサー率75% (253/335)
mod_rewrite を使って Listen 80 Listen 12345 UseCanonicalName Off RewriteEngine On RewriteCond %{SERVER_PORT} ^12345$ RewriteRule ^/bar$ - [PT] RewriteCond %{SERVER_PORT} ^12345$ RewriteRule .* - [F] RewriteRule ^/bar$ - [F] でどうでしょうか。 URL の読み替えを行っているわけではありませんが、 DocumentRoot が同じところを指しているなら、 読み替えないでも同じコンテンツがアクセスされます。
- pakuti
- ベストアンサー率50% (317/631)
apacheのみでは >外部からは/barリソースへは12345ポートを指定しなければアクセスできないという事ですね。 は出来ないような気がします。 それ以外の、ポート12345へのリクエストは、iptablesのForwardingを利用すれば可能です。 一般的にこのような事を実現しようとするのであればリバースプロキシーになるかと思います。 該当サーバーで、apacheをもう1つたてポート12345でリッスンし 条件によってコンテンツへのアクセスの可否を行えば出来るかもしれません。 私自身は、apacheでのProxyの構築経験が無いためなんとも言えませんが。。。。 (他のソフトの導入が可能であれば、squidやdelegate等でもOKかと)
- notnot
- ベストアンサー率47% (4900/10358)
www.foo.net:12345/bar を www.foo.net:80/bar に読み替えると、www.foo.net/bar になりますが、それをエラーにすると結局全部エラーでは? 書いてあることが矛盾するので結局どうしたいのか不明です。 もしかすると、 「www.foo.net:12345/bar の時は /var/www/html/bar を返す。それ以外はエラ-」 と言う意味ですか?それなら単にポート12345でapacheを上げればいいだけですが。
補足
情報が足りずに申し訳ありません。 実にそこが肝なのですが、 www.foo.net:80/barないし、www.foo.net/bar を外部から直接リクエストした場合はエラーとし、 外部からwww.foo.net:12345/barをリクエストし、そのリクエストを内部でwww.foo.net:80/barに読み替えた場合は正常なアクセスとして処理したいという事です。 外部からは/barリソースへは12345ポートを指定しなければアクセスできないという事ですね。 >ポート12345でapacheを上げればいい 12345ポートをListernするという事でしょうか。 この時、bar以外のリソースへのリクエストは、 外部から直接標準の80ポートにアクセスされる物で、12345ポートへのアクセスはエラーとしなければいけません。 barだけ特例的に12345ポートへのアクセスを正常として扱いたいのです。 その辺りを解決できれば良いのですが。