Проблемы Tomcat с двойными экземплярами хоста, контекстов и веб-приложений

/...слишком длинное и непонятное объяснение.../

Другими словами, я ищу правильный путь для доступа к сайту только с (одним или несколькими) доменными именами (затем www.my_domain.it, а не www.my_domain.it/appname), и все они должны указывать на один и тот же экземпляр веб-приложения (чтобы с любого доменного имени, к которому вы обращаетесь, всегда отображались одни и те же данные среды выполнения).

Итак, да, я развернул файл WAR в папке tomcat/webapps, теперь правильно отредактировать conf/server.xml, чтобы получить упомянутый выше результат, соответствует одному из следующих?

1.

<Host name="my_domain.eu" appBase="webapps" unpackWARs="true" autoDeploy="true">
            <Alias>www.my_domain.eu</Alias>
            <Alias>www.my_domain.it</Alias>
            <Alias>www.my_domain_2.it</Alias>
            <Context path="" docBase="appname" debug="0" privileged="true" />
            ...
    </Host>

2.

<Host name="my_domain.eu" appBase="webapps/appname" unpackWARs="true" autoDeploy="true">
                <Alias>www.my_domain.eu</Alias>
                <Alias>www.my_domain.it</Alias>
                <Alias>www.my_domain_2.it</Alias>
                <Context path="" docBase="appname" debug="0" privileged="true" />
                ...
        </Host>

3.

<Host name="my_domain.eu" appBase="webapps/appname" unpackWARs="true" autoDeploy="true">
                <Alias>www.my_domain.eu</Alias>
                <Alias>www.my_domain.it</Alias>
                <Alias>www.my_domain_2.it</Alias>
                <Context path="/appname" docBase="appname" debug="0" privileged="true" />
                ...
        </Host>

4.

<Host name="my_domain.eu" appBase="webapps/appname" unpackWARs="true" autoDeploy="true">
                    <Alias>www.my_domain.eu</Alias>
                    <Alias>www.my_domain.it</Alias>
                    <Alias>www.my_domain_2.it</Alias>
 <!-- without context definition -->
                    ...
            </Host>

В противном случае, каково правильное решение? Спасибо всем!


person Gianluigi Leonardi    schedule 14.12.2018    source источник
comment
Пожалуйста, верните свой вопрос к тому, каким он был, когда вы впервые разместили его. Вопрос — это не разговор, который нужно менять, когда вы получаете ответы. Пока читаю, вопросов нет.   -  person Christopher Schultz    schedule 17.12.2018
comment
Извините, Крис, но первая формулировка действительно была неясной и слишком длинной ... Я только переформулировал те же концепции более простым и компактным способом.   -  person Gianluigi Leonardi    schedule 17.12.2018


Ответы (1)


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

Однако рекомендуется не редактировать server.xml с этой информацией, а создавать отдельные файлы context.xml в conf/hostname или просто развертывать их в каталоге веб-приложений хоста. Все, что вы настраиваете в server.xml, требует перезапуска сервера, если вы хотите что-то изменить. Конфигурацию за пределами server.xml можно подобрать во время выполнения без перезапуска.

Изменить: возможно, вывод моего предыдущего ответа не был ясен:

Когда вы используете элементы Context для настройки: я предлагаю не использовать каталог веб-приложений для развертывания ваших веб-приложений. Просто укажите каталог, в котором вы фактически развернули свое веб-приложение. Это гарантирует, что ни один контекст не развертывает ваше приложение из webapps/appname как /appname, даже если ваше определение контекста указывает на /.

Альтернативой является развертывание вашего приложения с именем ROOT в веб-приложениях — это ярлык для фактического развертывания этого веб-приложения как / (осторожно: ВСЕ ЗАГЛАВНЫЕ буквы для имени каталога или файла (ROOT.war) даже в Windows, если я правильно помню ). Но, ИМХО, было бы понятнее, если бы вы решили, что определение контекста определяет путь (но развертывание вне базы приложений (webapps) или развертывание в базе приложений (например, webapps) развертывание .

Издевательство над appbase, чтобы указать на какой-то каталог в веб-приложениях, гарантирует, что вы будете раздражать любого, кто ожидает, что приложения в каталоге webapps будут развернуты на Tomcat. Это простой способ потратить много времени на отладку фантомных проблем — не делайте этого.

person Olaf Kock    schedule 14.12.2018
comment
Спасибо за ответ, Олаф, но я уже знаю об этом. Я только что переформулировал вопрос, чтобы лучше объяснить, что я хочу сделать. В любом случае, спасибо - person Gianluigi Leonardi; 17.12.2018