Apache mod_rewrite и несколько доменов

Я пытаюсь использовать mod_rewrite для сопоставления нескольких доменов с разными сервлетами на одном хосте. Пример:

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 и контейнер сервлета находятся на разных машинах, но я думаю, это не имеет значения?)


person ahahn    schedule 05.04.2010    source источник


Ответы (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>

Могут быть более чистые решения, но - если работает как надо.

person ahahn    schedule 15.04.2010