виртуальный хост apache и «динамические» домены - PullRequest
4 голосов
/ 04 августа 2011

У меня есть Java-приложение, отвечающее на несколько доменов и использующее для каждого домена определенный виртуальный хост Apache. Это потому, что Apache быстрее, чем tomcat, обслуживает статические ресурсы.

Необходимо сделать это во время выполнения, без перезапуска конфигурации Apache. Для выполнения этого действия я использую директиву VirtualDocumentRoot, как описано ниже:

AddType text/html .html .shtml
AddOutputFilter INCLUDES .html .shtml

NameVirtualHost *:80
UseCanonicalName Off
<VirtualHost *:80>
    ServerName domain.com
    ServerAlias *

    # Define virtual host directory, using entire domain
    VirtualDocumentRoot /path/to/whosts/%0

    # Define directory access
    <Directory "/path/to/whosts/">
        Options -Indexes MultiViews +Includes
        Order allow,deny
        Allow from all
    </Directory>

    # Define Java Proxies
    <Proxy *>
        AddDefaultCharset Off
        Order deny,allow
        Allow from all
    </Proxy>

    # Allow Libs (static resources) to access apache directly
    ProxyPass /libs !
    ProxyPass / ajp://localhost:8009/
    ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>

Это не очень хорошо работает, потому что если я пытаюсь получить доступ к www.domain.com, он отличается от доступа к domain.com.

Вы считаете хорошей идеей зарегистрировать символическую ссылку на www.domain.comto domain.com???

Существует еще один способ сделать это? Я действительно беден в управлении Apache ...

Спасибо большое!

Чао, Давиде.

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

Я регулярно использую символические ссылки, чтобы связать несколько доменов с одним и тем же веб-корнем, когда выполняю конфигурации, подобные этой, в этом решении нет явного вреда, поэтому, безусловно, нет причин избегать его.

0 голосов
/ 04 августа 2011

Хорошим способом было бы решить, какой тип URL должен быть каноническим, и использовать mod_rewrite для перенаправления URL-адресов на него - например, сопоставить запросы с domain.com и перенаправить их с www.domain.com. В Интернете доступно множество учебных пособий о том, как это сделать, которые вы легко сможете найти.

Вне моей головы, вы можете использовать что-то вроде:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.$ [NC]
RewriteRule ^(.*) http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Это может вызвать проблемы, если вы используете SSL, хотя из-за жестко закодированного http://. Я думаю, что вы можете изменить строку RewriteRule на следующую, чтобы избежать этого:

RewriteRule ^(.*) %{SERVER_PROTOCOL}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
...