1

mod_rewriteを使用して、複数のドメインを1つのホスト上の異なるサーブレットにマップしようとしています。例:

www.dom1.com-> 192.168.1.n/dom1

www.dom2.com->192.168.1.n/dom2..。

mod_rewriteとmod_proxyおよびVirtualHostディレクティブを使用していますが、ProxyPassReverseを介した逆マッピングが期待どおりに機能しないようです。

ProxyPassReverse /subdomain.domain.com http://192.168.1.n/subdomain

動作しません。私は書き換えをオンにしました-でログオンします

RewriteLog /var/log/rewrite.log

ログから、書き換えは機能し、問題はリバースマッピングにあるようです。ただし、リバースマッピングエントリが表示されません。リバースマッピングがログに記録されていないか、別のコマンドをアクティブにする必要があるようです。(Apacheとサーブレットコンテナは異なるマシン上にありますが、これは問題ではないと思いますか?)

4

1 に答える 1

2

結局のところ、私は自分に合った解決策を見つけました。これは、ドメイン1の1つの仮想ホストを示す私の構成からの抜粋です。

<VirtualHost *>
  ServerName www.dom1.com
  ServerAlias dom1.com

  RewriteEngine On

  # logs might be omitted
  RewriteLog /var/log/dom1_rewrite.log
  RewriteLogLevel 2
  CustomLog /var/log/dom1_custom.log common
  ErrorLog /var/log/dom1_error.log

  # rewrite to internal ip
  RewriteRule ^/(.*) http://192.168.1.105/dom1/$1 [L,P,E=proxy_ok:1]

  # Preserve the host-part in the forwarded url
  ProxyPreserveHost On

  # Substitute responses with the original
  ProxyPassReverse / http://192.168.1.105/dom1/
  ProxyPassReverse / http://192.168.1.105/dom1
  ProxyPassReverse / http://dom1.com/dom1/
  ProxyPassReverse / http://dom1.com/dom1
</VirtualHost>

最初の構成の何が問題だったのか-ホストを保持してから、必要なすべてのProxyPassReverseルールを追加して応答を置き換える必要がありました。

そして、これは私のmod_proxy構成です:

<IfModule mod_proxy.c>
        #turning ProxyRequests on and allowing proxying from all may allow
        #spammers to use your proxy to send email.

        ProxyRequests Off

        <Proxy *>
                AddDefaultCharset off
                Order deny,allow
                Deny from all

               # Proxies just in case Proxy_ok is set
               Allow from env=proxy_ok
        </Proxy>

        # Not sure whether we need this ...
        # Enable/disable the handling of HTTP/1.1 "Via:" headers.
        # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
        # Set to one of: Off | On | Full | Block
        ProxyVia On
</IfModule>

よりクリーンな解決策があるかもしれませんが、正常に機能する場合。

于 2010-04-15T15:27:18.967 に答える