Как создать домен типа "http://username.example.com"" в веб-приложении J2EE? - PullRequest
11 голосов
/ 06 февраля 2010

Я разработчик веб-приложений, только начинающий. Я проектирую небольшое веб-приложение J2EE (например, имя службы будет выглядеть как http://www.example.com).. Используется Apache Tomcat) Spec: Когда пользователь регистрируется в веб-приложении, он получает собственный домен, например

http://username.example.com

Как я могу сделать это в моем веб-приложении. Я все еще разрабатываю приложение. я еще не принимал это.

Ответы [ 6 ]

4 голосов
/ 06 февраля 2010

У вас есть две проблемы.

Сначала вам нужно, чтобы браузер пользователя распознал, где находится "username.mysite.com". Это требует настройки DNS и обычно в форме «подстановочного знака CNAME». Обратите внимание, что dyndns.org предоставляет это в своем пакете Dynamic DNS Pro, если вы хотите контролировать себя в фазе пробного запуска.

Вторым является то, что вам нужно будет указать Tomcat, чтобы он выводил пользователя из имени хоста, и предоставить специальный сайт для каждого пользователя. Самый простой способ сделать это, скорее всего, с помощью фильтра сервлетов, который «пробует» имя хоста в URL и устанавливает свойства, необходимые для ваших jsp-страниц.

4 голосов
/ 06 февраля 2010

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


ServerAdmin webmaster@subdomain1.example.com
DocumentRoot /www/subdomain1.example.com
Имя_сервера subdomain1.example.com
ErrorLog logs / subdomain1.example.com-host.example.com-error_log
CustomLog logs / subdomain1.example.com-access_log common

Хотя есть одна проблема. Если ваше решение требует создания папок, добавляется виртуальный хост и перезапускается Apache, что не очень хорошо для меня. Как бы я справился с этой проблемой:

  1. Создайте виртуальный хост с подстановочными знаками для «* .example.com», чтобы все запросы к поддоменам направлялись на этот виртуальный хост.
  2. Установите правило перезаписи для него, чтобы перенаправить все запросы на одну страницу, скажем index.jsp
  3. Запишите страницу JSP, взяв имя хоста, на который пришел пользователь, выполнив поиск по URL-адресу перенаправления в хранилище, то есть mysql db, и перенаправив на него. Этот сценарий будет сценарием index.jsp на хосте с подстановочными знаками.

Если вы используете этот способ, вам нужно всего лишь один раз настроить вышеуказанное, а затем добавить субдомены в хранилище, что представляется более гибким решением, чем создание подпапок и изменение конфигурации Apache.

2 голосов
/ 06 февраля 2010

Похоже, вы ищете виртуальных хостов на Tomcat. Затем необходимо настроить субдомены в Tomcat:

http://tomcat.apache.org/tomcat-6.0-doc/virtual-hosting-howto.html

Веб-приложение контролирует только часть URL, начиная с корневого контекста. Поэтому, если на «www.mysite.com/» есть веб-приложение, оно может обрабатывать запросы на «www.mysite.com/alice» или «www.mysite.com/bob», но не обрабатывает запросы «Алисы» .mysite.com / ", если это не было настроено на сервере Tomcat. Это означает, что для каждого нового пользователя Tomcat должен быть настроен с новым поддоменом. Я думаю, что это не может быть сделано из веб-приложения.

2 голосов
/ 06 февраля 2010

если вы работаете в windows, отредактируйте файл \ windows \ system32 \ drivers \ etc \ hosts и добавьте строку, подобную этой:

127.0.0.1  username.mysite.com

тогда, когда сервер работает, вы можете открыть браузер и набрать:

http://username.mysite.com
http://username.mysite.com:8080

или что-то еще и посмотрите веб-сайт.

для этого вам понадобятся права администратора.

если вы используете Linux, вам нужно отредактировать / etc / hosts и сделать то же самое.

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

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

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

Я знаю, что это старый вопрос, но я действительно придумал ответ, который работает для Tomcat , недавно:

Во-первых, вам нужен Tomcat за Apache.

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

<VirtualHost *:80>

    ProxyRequests On
    ProxyVia On
    <Proxy http://example.com>   #FIXDOMAIN
        Order deny,allow
        Allow from all
    </Proxy>

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$ [NC]   #FIXDOMAIN
    RewriteRule ^(.*)$ http://example.com$1?proxy_domain=%{HTTP_HOST} [P,QSA]    #FIXDOMAIN

    JkMount /* default

    ServerName example.com    #FIXDOMAIN
    ServerAlias *.example.com    #FIXDOMAIN

    <!-- Other normal options go here -->

</VirtualHost>

В-третьих, вам нужно настроить виртуальный домен в Tomcat на example.com.

<Host name="example.com" appBase="webapps-example"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
    <Alias>www.example.com</Alias>
</Host>

Это создаст подстановочный домен, который может обрабатывать Apache. Правила mod_rewrite переписывают URL-адрес на один URL-адрес, который понимает Tomcat. Затем через mod_proxy домен субдомена проксируется к базовому домену вместе с параметром GET, называемым proxy_domain (который привязан поверх существующих параметров GET), чтобы определить, каким было исходное имя пользователя.

Это довольно сложное (и, вероятно, не очень масштабируемое решение) из-за того, что Apache Tomcat не поддерживает домены подстановочных знаков. Но это работает!

0 голосов
/ 06 февраля 2010

Вы можете создать виртуальный хост с подстановочными знаками

<VirtualHost *:80>
    ServerName example.com
    ServerAlias *.example.com
</VirtualHost>

, а затем обрабатывать субдомены внутри кода приложения, используя что-то вроде HttpServletRequest#getRequestURL()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...