Назад | Перейти на главную страницу

Заставить Tomcat переходить прямо в приложение

У меня есть несколько установок Tomcat, на которых установлено только одно основное приложение (в дополнение к таким вещам, как Manager). Есть ли лучший способ, кроме изменения домашней страницы Tomcat по умолчанию для включения перенаправления в приложение? Или, лучше, как я могу нанести на карту http://domain.com:8080/app чтобы просто http://domain.com:8080 а другие приложения (например, Manager) оставить в покое?

Установите приложение, чтобы стать ROOT контекст.

Это можно сделать:

  1. развертывание файла войны как ROOT.war,
  2. развертывание взорванного файла войны в webapps/ROOT каталог
  3. развертывание приложения по пути "/" через диспетчер Tomcat,
  4. добавление Раздел контекста в вашу конфигурацию Tomcat: <Context path="/" docBase="${catalina.home}/webapps/app"/>

Я почти всегда ставлю Apache перед Tomcat и подключаюсь через AJP (либо mod_proxy_ajp, либо mod_jk), потому что Tomcat невероятно неэффективен при обслуживании статического контента и из-за конкретной проблемы, которую вы описываете. Кроме того, прикрепив внешний интерфейс, вы можете защитить / manager и любые другие приложения с правилами перезаписи. / manager также является частым источником атак, и этот метод не позволяет внешнему миру полностью добраться до него.

Чтобы создать перенаправление, как вы описываете, создайте правило перезаписи с эффектом:

    # if the URL doesn't go to /myapp /admin /jkstatus /server-status or /awstats, redirect to /myapp
    RewriteCond %{REQUEST_URI} !^/myapp
    RewriteCond %{REQUEST_URI} !^/admin
    RewriteCond %{REQUEST_URI} !^/jkstatus
    RewriteCond %{REQUEST_URI} !^/server-status
    RewriteCond %{REQUEST_URI} !^/awstats
    RewriteRule .* /myapp [R,L]

Я уверен, что что-то подобное можно сделать на уровне Tomcat, но я предпочитаю сохранять Tomcat переносимым и простым и создавать любые подобные правила на уровне Apache.

Если вы это сделаете, не забудьте JkUnmount или исключите через proxy_ajp ваш статический контент, чтобы он обслуживался из Apache.