ApacheのProxyでURL書き換えをせずに動作させる方法

このQ&Aのポイント
  • ApacheのProxyを使用して、URLを書き換えずに動作させたい場合、mod_rewriteを試すことができます。しかし、その方法でもURLは書き換わってしまいます。そこで、他の方法を探しているのですが、何かよい方法はありますか?
  • ApacheのProxyPassを使用して新しいサーバにアクセスすると、URLが書き換わってしまいます。この問題を解決するためにmod_rewriteを試してみましたが、同じような結果になりました。URLを書き換えずに新しいサーバにアクセスする方法はありますか?
  • 現在、ApacheのProxyを使用して新しいサーバにアクセスしようとしていますが、URLが書き換わってしまい困っています。mod_rewriteを使用しても同じような結果になります。URLを書き換えずに新しいサーバにアクセスする方法を教えてください。
回答を見る
  • ベストアンサー

Apacheのproxyについて

■やりたいこと URLを書き換えずにAPACHEにproxyとして動作させたい ■背景 現在、右の名前(仮)で運用しているサイトがあります。http://hoge1.hoge.jp/ ※PC用サイトです。 このサイトを9月中旬に現在の環境とは異なる環境へ、 物理的に移管します。 移管は段階的に行うため、 http://hoge1.hoge.jp/の新サーバを物理的に構築はしますが、 そちらには当初コンテンツのせず、 DNSでhoge1.hoge.jpのIPだけ新サーバのIPに切り替え、 その新サーバから旧サーバへコンテンツをとりにいき、 それをエンドユーザへ返答させたいと思っております。 ■検討していること・試したこと ApacheのProxyPassを使ったプロキシを試しました。 ProxyPass / http://192.168.1.1/hoge.html ※ /は新サーバのドキュメントルートです ※192.168.1.1は旧環境(移管前の環境)と理解してください。 この場合、ブラウザから新サーバへアクセスすると、 アドレスバーのURLは、http://192.168.1.1/hoge.htmlに書き換えられてしまいます。 これをやめたいので、mod_rewirteを試してみました。 RewriteRule ^/(.*)$ http://192.168.1.1/hoge.html/$1 しかし、ProxyPassの時と同じように、 ブラウザのURLが書き換わってしまいます。 mod_rewirteの機能としては、 このようなURLの書き換えは正しい動きと理解していますが、 これをどうにかURLを書き換えないで、 当初アクセスしたままのURLをブラウザのアドレスバーに 表示させておきたいと考えております。 何かよい方法はありますでしょうか? ご教授よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.2

書かれたルールでは http://hoge1.hoge.jp/a.html -> http://192.168.1.1/hoge.html/a.html http://hoge1.hoge.jp/hoge.html/a.html -> http://192.168.1.1/hoge.html/a.html という対応になります。 hoge.html を一段減らすルールを追加してうまくいったということ ですね。 プロキシーした場合に転送先の URL に変わってしまうというのは普通は ないと思うのですが、なぜでしょうかね。プロキシー先のコンテンツの 記述に原因がありそうです。 ハードルは高いかもしれませんが、 RewriteLog logs/rewrite.log RewriteLogLevel 9 でログを取ると何か見つかるかもしれません。

taikimuru
質問者

お礼

回答ありがとうございます! 返信遅れましてすみません。 >プロキシーした場合に転送先の URL に変わってしまうというのは普通は >ないと思うのですが、なぜでしょうかね。プロキシー先のコンテンツの 記述に原因がありそうです。 なるほど。 転送先のサーバ・コンテンツを管理運営している会社から、 私の会社へコンテンツ移管するため、 向こうの詳細をあまり詳しく教えてくれないので、 なんとかうまくいってよかったです。 動作についてはなんとなく理解いたしましたw >RewriteLog logs/rewrite.log >RewriteLogLevel 9 デバッグして解析してみます。 ありがとうございました。

その他の回答 (1)

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

ProxyPassReverse / http://192.168.1.1/hoge.html/ してもだめですか。

参考URL:
http://httpd.apache.org/docs/2.2/ja/mod/mod_proxy.html#proxypassreverse
taikimuru
質問者

お礼

ProxyPass / http://192.168.1.1/hoge.html/ ProxyPassReverse / ​http://192.168.1.1/hoge.html/ という2行を書いたのですが、だめでした。 だめの状態ですが、 192.168.1.1の環境にある一部コンテンツが、 相対パスでありかを指定されていたため、 リンク切れのような状態となってしまいました。 このため以下のようにmod_rewrite+mod_proxyの連携で試したところ、 RewriteRule ^/hoge\.html/(.*)$ http://192.168.1.1/hoge.hmtl/$1 [P] RewriteRule ^/(.*)$ http://192.168.1.1/hoge.hmtl/$1 [P] うまくいきました。 ⇒リンク切れとなっていたコンテンツも表示され、 ブラウザのアドレスバーのURLも書き換わらず、 検証環境のIPアドレスがアドレスバーに残ったままとなりました。 ただ、ここで疑問があります。 はずかしながら、 このRewriteRuleはインターネット上のいろいろなサイトをみて、 見よう見真似で書いたものでして、 この動作がいまいち理解できておりません。 もしこのRewriteRuleの動作について詳しくお分かりになるようでしたら、 教えて頂きたいのですが。。。

関連するQ&A

  • Apache mod_proxy_balancer

    Apache2.4のmod_proxy_balancerとWeb Socket通信についてご教示下さい。 ■環境 Linux6.5 Apache 2.4 ■実現したいこと Apacheをフロントとエンドで2台構成で使っています。 ・フロント mod_proxy_balancerを使用し、後続のエンド用Webサーバの振り分けを行っています。 通信はWeb socket通信を使用しております、WSSの通信をWSに変換してエンドに中継しています。 ・エンド 基本的なWebサーバの機能を有しております。この奥にAPがいる形です。 ■問題 フロントとエンドが1:多の関係だと、Web Socket通信が思うようにいきません。 しかし1:1の関係だとWeb socketの通信が想定通りに行われます。 ■ご教示いただきたいこと mod_proxy_balancerを使用したWebsocket通信がうまくいきませんが、 このあたりで何か事例など知っていましたら教えていただけないでしょうか。

  • Apache→Tomcatでセッション維持されない

    Apache->Tomcatでセッションが維持されない Apacheのproxy_ajp.confの設定を ProxyPass /xxx/ ajp://localhost:8009/ とした時にhttp://サーバー名/xxx/(webapps内フォルダ名)/ でアクセスした場合アクセスする度に新しいセッションIDになってしまします。 Apacheのproxy_ajp.confの設定を ProxyPass / ajp://localhost:8009/ とした時にhttp://サーバー名/(webapps内フォルダ名)/ でアクセスした場合はセッションIDは保持されます。 http://サーバー名/でアクセスした時はTomcatのwebappsとは別の場所に配置したWebサイトを表示させている為、 【ProxyPass / ajp://localhost:8009/】とは設定したくはないんですが・・・ どうしたらよいでしょうか・・・? 今の状況 ■http://サーバー名/xxx/(webapps内フォルダ名)/  でアクセスするとセッションが保持されない。 ■Apache単体でphpを使った時、セッションは保持される。 ■8080ポートを使ってTomcatへ直接アクセスした場合、セッションは保持される。 環境 OS:CentOS 5 Apache:2.2 Tomcat:6.0

    • ベストアンサー
    • Java
  • apache2.2とtomcat6.0(ssl設定済)の連携に関して質

    apache2.2とtomcat6.0(ssl設定済)の連携に関して質問です。 環境(windows 2003 server,JDK1.6,eclipse3.5,struts1.3,postgresql8.4) apacheを使用して公開したいのですが、tomcatのssl設定が絡んでいる関係でうまくいきません。 tomcatでsslを設定せず、apacheでsslを設定した方が良いのか。 tomcatとapache両方でssl設定をした方が良いのか。 tomcatでsslを設定しているとapache2.2とtomcat6.0の連携はできないのか。 または、やり方が違うのか。 教えてください。 tomcat(ssl設定済)をapacheに連携したいのですが、Apache2.0以前の時と異なり、mod_jk/mod_jk2は要らなくなったみたいなので、インターネットを調べた結果 ■server.conf <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> をコメント <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> を追加 ■httpd.conf #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so コメントを解除 <Location /jsp/> ProxyPass ajp://localhost:8009/jsp> </Location>

    • ベストアンサー
    • Java
  • Apache2 インストール後モジュール追加(proxy, proxy_ajp)

    標題の件でご教授ください。 現象としては、Apache2にモジュール(mod_proxy.soおよびmod_proxy_ajp.so)追加しようとして、mod_*.soが作成されず困っております。 なお、インストール時、configureにオプション"--enable-proxy" "--enable-proxy-ajp"を付加する方法は知っていますが、インストール後にモジュールを追加する方法を教えていただきたいです。 ■環境 OS: Red Hat Enterprise Linux 5.3 ■参考ページ 「Enjoi Blog」~apache2 にモジュールを追加する http://blog.enjoitech.jp/article/131 ■実行手順(mod_proxy.soの場合の例) 1.コンパイル。 [root@localhost proxy]# /usr/local/apache2/bin/apxs -c mod_proxy.c proxy_util.c /usr/local/apache2/build/libtool --silent --mode=compile gcc -prefer-pic -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I/usr/local/apache2/include -I/usr/local/apache2/include -I/usr/local/apache2/include -c -o mod_proxy.lo mod_proxy.c && touch mod_proxy.slo /usr/local/apache2/build/libtool --silent --mode=compile gcc -prefer-pic -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I/usr/local/apache2/include -I/usr/local/apache2/include -I/usr/local/apache2/include -c -o proxy_util.lo proxy_util.c && touch proxy_util.slo /usr/local/apache2/build/libtool --silent --mode=link gcc -o mod_proxy.la -rpath /usr/local/apache2/modules -module -avoid-version proxy_util.lo mod_proxy.lo 2.オブジェクトが作成されていることを確認。 [root@localhost proxy]# ls -la mod_proxy.* -rw-r--r-- 1 root root 88327 2月 1 2009 mod_proxy.c -rw-r--r-- 1 root root 4942 1月 11 2007 mod_proxy.dsp -rw-r--r-- 1 root root 32152 11月 12 2008 mod_proxy.h -rw-r--r-- 1 root root 758 10月 23 21:42 mod_proxy.la -rw-r--r-- 1 root root 303 10月 23 21:42 mod_proxy.lo -rw-r--r-- 1 root root 180184 10月 23 21:42 mod_proxy.o -rw-r--r-- 1 root root 0 10月 23 21:42 mod_proxy.slo [root@localhost proxy]# ls -la proxy_util.* -rw-r--r-- 1 root root 81086 7月 3 20:57 proxy_util.c -rw-r--r-- 1 root root 305 10月 23 21:42 proxy_util.lo -rw-r--r-- 1 root root 148440 10月 23 21:42 proxy_util.o -rw-r--r-- 1 root root 0 10月 23 21:42 proxy_util.slo 3.インストール→失敗。 [root@localhost proxy]# /usr/local/apache2/bin/apxs -ian proxy mod_proxy.la /usr/local/apache2/build/instdso.sh SH_LIBTOOL='/usr/local/apache2/build/libtool' mod_proxy.la /usr/local/apache2/modules /usr/local/apache2/build/libtool --mode=install cp mod_proxy.la /usr/local/apache2/modules/ cp .libs/mod_proxy.lai /usr/local/apache2/modules/mod_proxy.la cp .libs/mod_proxy.a /usr/local/apache2/modules/mod_proxy.a chmod 644 /usr/local/apache2/modules/mod_proxy.a ranlib /usr/local/apache2/modules/mod_proxy.a PATH="$PATH:/sbin" ldconfig -n /usr/local/apache2/modules ---------------------------------------------------------------------- Libraries have been installed in: /usr/local/apache2/modules If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,--rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- Warning! dlname not found in /usr/local/apache2/modules/mod_proxy.la. Assuming installing a .so rather than a libtool archive. chmod 755 /usr/local/apache2/modules/mod_proxy.so chmod: cannot access `/usr/local/apache2/modules/mod_proxy.so': そのようなファイルやディレクトリはありません apxs:Error: Command failed with rc=65536 以上、よろしくお願いいたします。

  • Apache2.2とTomcat6.0の連携方法

    Apache2.2とTomcat6.0の連携がうまくいかず、困っています。 宜しくお願い致します。 ■問題点 ApacheとTomcatの連携の設定を行い、http://localhost/examplesを 表示させようとしましたが、[ページが見つかりません]と表示され、 ApacheとTomcatの連携が出来ません。 以下に設定した内容を記載致しました。 設定内容に不備があればご教授お願い致します。 ■Apacheの設定は以下の様にしています。 C:\Program Files\Apache Software Foundation\Apache2.2\conf 内の httpd.confを編集 (1)コメント行の有効化 #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so 先頭の「#」を外し、有効化する。 ↓ LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so (2)文末に以下を追加する。 (Apacheへの要求を Tomcatにて処理が行われる様にする。) <Location /examples/> ProxyPass ajp://localhost:8009/examples/ </Location> <Location /examples/> ProxyPass ajp://localhost:8009/jspbook/ </Location> ■備考 1.Apache2.2インストール後、Apache2.2サーバを起動させ、 http://localhost/ が表示される事は確認出来ています。 2.Tomcat6.0インストール後、Tomcatを起動させ、 http://localhost:8080/ が表示される事は確認出来ています。 3.Apacheのバージョン:Apache2.2.6  Tomcatのバージョン:Tomcat6.0.14 宜しくお願い致します。

  • Apache2.2 Aliasについて

    http://www.adminweb.jp/apache/docroot/index3.html 上のサイトを参考に、ドキュメントルート以外の場所へアクセスできるようにしたいんですが 参考サイト通りにやっても、うまく動きません。 httpd.confは <IfModule alias_module> Alias /labo/ "C:/Apache_Server/data/" <Directory "C:/Apache_Server/data"> Allow from all </Directory> ScriptAlias /cgi-bin/ "C:/Apache_Server/Apahce2.2/cgi-bin/" </IfModule> このように書いています。 (ServerRoot は "C:/Apache_Server/Apahce2.2" DocumentRoot は "C:/Apache_Server/Apahce2.2/htdocs"です) C:\Apache_Server\data に index.htmlを置き http://localhost/labo/index.html へアクセスしても Not Found The requested URL /labo/index.html was not found on this server. と表示されます。 環境はApache2.2、windows7です。 どこか間違っているところがあるのでしょうか? よろしくお願いいたします。

  • ApacheとTomcat ポート80番について

    現在、VPSでマルチドメインで以下の2つサイトを運用しています。 1. PHPによるWordPressサイト 2. Javaによる動的サイト(静的HTML無し) Apache HTTP Server(ポート80)のバーチャルドメインを使用し、2のJavaサイトの場合はAJPでTomcat(ポート8009)へ処理を振り分けています。一般的な連携方法でと思います。 サーバーOSはCentOS5.5、IPアドレスはひとつ、ウェブサーバーにはApache HTTP Server, サーブレットコンテナとしてApache Tomcatを使用しています。root権限保持しています。 質問させていただきたいことは、Apache HTTP ServerおよびApache Tomcatを同時に起動させながらポート80番を1のサイトの場合はApache HTTPが使用、2のサイトの場合はApache Tomcatが使用できるようにする方法はご存知ないでしょうか?ということです。 現在はTomcat単独で運用する場合よりもApache HTTPを経由させるためにJavaのサイトが若干反応が遅く感じます。そもそも静的コンテンツはありませんし、URLの書き換えなども別の手段を用いているため、Apache HTTP Serverを経由する意味はどちらのサイトともブラウザでポート80番へアクセスできるようにする以外ありません。 何かよい方法ご存知ないでしょうか?なお、IPアドレスはひとつ増やしても構いません。

  • URLでフォルダの最後のスラッシュを省略した時の挙動

    Apache サーバを立ててみました。 一応、普通に動いているのですが、サイト配下のフォルダにアクセスする際、 URLの最後のスラッシュを付け忘れるとドメインの www が除去されて、「ページが見つかりません」に なってしまいます。 OK → http://www.example.jp OK → http://www.example.jp/hoge/ http://www.example.jp/hoge でアクセス(最後のスラッシュを付けない)すると http://example.jp/hoge/ となってしまうのはなぜ? Apacheの設定?

  • ApacheにPHPを組み込みつつ、Tomcatを連携

    こんにちは。現在私は自宅のパソコン(WindowsXP)をWWWサーバにしようと考えておりまして、Apache(Ver2.2.4)をインストールし、Tomcat(ver5.5)と連携させております。ApacheからTomcatに連携させることは成功した(はず)と思います。以下のような設定です。confフォルダの中のhttpd.confファイルの中で、 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so を有効にし、 ProxyPass / ajp://localhost:8009/ を追加しました。これで、http://localhost/と入力すると、:8080を付加しなくてもTomcatのトップに跳ぶようにはなっています。これで連携はOKなんですよね?  さらにこれに、PHPをモジュールとして組み込みたいんです。 Tomcatを使わずに、Apacheのみで動かす場合は、うまくphpがモジュールとして組み込めて、Apacheのhtdocsフォルダにphpinfo.phpファイルをおいて、テストすると正常に表示されます。  しかし、Tomcatと連動させると、phpをApacheのモジュールに組み込んでも、Tomcatとの連携が優先されて、Apacheの中身(htdocsフォルダなど)がブラウザで呼び出せないために、phpファイルにアクセスできません。  以上が疑問点ですが、とにかく知りたいのは、Tomcatとの連携とApacheの機能(PHPをモジュールに組みこんで使う)とを両立させるには、どうしたらいいのでしょうか、ということです。どなたか教えてくださいませんか。お願いします!

    • 締切済み
    • PHP
  • Fedora12にてapacheを使用し異なる2つのサーバでのバーチャ

    Fedora12にてapacheを使用し異なる2つのサーバでのバーチャルホストについてなのですが、物理的に異なる2つのwebサーバにバーチャルホストの設定でそれぞれのサーバを運用する事は可能でしょうか? 現在: 192.168.1.14(xxxx.dip.jp) 192.168.1.26(yyyy.dip.jp) の上記2つのサーバでそれぞれapacheを使用しWEBサーバを建てております。 ルータでは192.168.1.26に対してport80を開けております。 192.168.1.14に対しても同様の事をしようと思いましたが、当然のことエラーがでてしまいました。 そこで、これからやりたい事として、 1:バーチャルホストの設定でURLにxxxx.dip.jpを指定したら、192.168.1.14にyyyy.dip.jpを指定したら192.168.1.26に接続したいと思います。 このように、1つのIPで複数のサイトを運用する名前ベースのバーチャルホストでもなく、1つのサーバに複数のIPを振っているIPベースのバーチャルホストでもなく、物理的に異なる2つのサーバに振られた2つのIPに対してのバーチャルホストなのですが、うまいこと設定できるでしょうか。 御教授の程宜しく御願い致します。