Apache ProxyPass к Tomcat – как удалить контекстный путь из URL?

Вопрос или проблема

У меня есть конфигурация Apache:

<IfModule mod_ssl.c>
<VirtualHost *:443>

    ServerName project.example.com
    ServerAlias ci
    ProxyRequests Off

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPreserveHost on
    ProxyPass / http://localhost:1111/project

    SSLCertificateFile /etc/letsencrypt/live/sub.example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/sub.example.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateChainFile /etc/letsencrypt/live/sub.example.com/chain.pem

</VirtualHost>
</IfModule>

Когда я вводю project.example.com, я получаю https://project.example.com/project/users/sign_in в браузере. Как убрать контекстный путь из URL?
Я хочу убрать project из URL и получить https://project.example.com/users/sign_in?

Я думаю, вы пропускаете завершающий слэш:

ProxyPass / http://localhost:1111/project/

Также хорошей идеей будет определить соответствующий ProxyPassReverse:

ProxyPassReverse / http://localhost:1111/project/

Сначала нужно удалить корень контекста из приложения. Если вы не определите контекст как / (пусто), вы не сможете получить доступ к приложению без корня контекста.

Это решение должно дать вам представление о том, как изменить корень контекста. После завершения шагов вы должны быть в состоянии получить доступ к вашему приложению по http://localhost:1111/.

Затем, перейдя к конфигурации httpd, уберите имя проекта:

ProxyPass / http://localhost:1111/

Ответ или решение

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

Шаг 1: Изменение корневого пути контекста в Tomcat

Первое, что необходимо сделать — это изменить корневой путь контекста вашего веб-приложения в Tomcat. По умолчанию, если ваш WAR файл развернут в каталоге с именем project, то Tomcat будет использовать этот каталог как часть контекстного пути. Чтобы изменить это, вам нужно выполнить следующие действия:

  1. Убедитесь, что ваше приложение развернуто в каталоге webapps, но не помещайте его в отдельный каталог. Это позволит Tomcat использовать корень по умолчанию.
  2. В случае если ваше приложение развернуто как WAR, вам следует переименовать WAR файл в ROOT.war. В этом случае при доступе по URL http://localhost:1111/ ваше приложение будет доступно без контекстного пути.

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

http://localhost:1111/

Шаг 2: Обновление конфигурации Apache

Теперь, когда приложение доступно без контекстного пути, вам необходимо обновить конфигурационный файл Apache для корректной проксификации запросов. Откройте ваш конфигурационный файл Apache (обычно это httpd.conf или файл, связанный с виртуальным хостом) и внесите следующие изменения:

Ваш текущий конфиг выглядит следующим образом:

ProxyPass / http://localhost:1111/project
ProxyPassReverse / http://localhost:1111/project

Измените его на:

ProxyPass / http://localhost:1111/
ProxyPassReverse / http://localhost:1111/

Шаг 3: Проверка конфигурации

После внесения изменений в конфигурацию Apache, рекомендуется проверить её на наличие ошибок:

sudo apachectl configtest

Если ошибки отсутствуют, перезапустите службу Apache для применения изменений:

sudo systemctl restart apache2

Заключение

После выполнения всех этих шагов, при вводе https://project.example.com/users/sign_in в браузере, вы должны быть перенаправлены к вашему приложению без контекстного пути /project.

Эти изменения не только упростят структуру ваших URL, но и улучшат обрабатываемость запросов, так как пользователи будут видеть более чистые и понятные адреса. Для поддержания стабильной работы системы, не забудьте проверять логи Apache и Tomcat на наличие возможных ошибок и предупреждений.

Оцените материал
Добавить комментарий

Капча загружается...