Подтвердить что ты не робот

Как создать домен, например "http://username.example.com" в веб-приложении J2EE?

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

http://username.example.com

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

4b9b3361

Ответ 1

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

< VirtualHost *: 80 >

ServerAdmin [email protected]
DocumentRoot/www/subdomain1.example.com
ServerName subdomain1.example.com
Журналы ErrorLog/subdomain1.example.com-host.example.com-error_log
CustomLog logs/subdomain1.example.com-access_log common
</VirtualHost>

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

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

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

Ответ 2

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

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

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

Ответ 3

если вы находитесь на окнах, отредактируйте файл \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, и какой веб-сервер вы используете.

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

Ответ 4

Похоже, вы ищете виртуальных хостов на 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", но оно не будет обрабатывать запросы "alice".mysite.com/", если это не было настроено на сервере Tomcat. Это означает, что для каждого нового пользователя Tomcat необходимо настроить с помощью нового поддомена. По-моему, это невозможно сделать из веб-приложения.

Ответ 5

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

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

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

Ответ 6

Я знаю, что это старый вопрос, но я действительно придумал ответ, который работает для 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 поддерживает не поддержку подстановочных доменов. Но он работает!