Вы не отображаете URL так, как хотите. У вас есть:
ProxyPass / ajp://localhost:8009/x/
Это означает, что часть /x
уже находится в URL и скрыта вне Apache. Так что если вы хотите /x/resources/img/logo.jpg
от Tomcat, тогда URL будет http://hostname.tld/resources/img/logo.jpg
вне Apache.
Если вы хотите сохранить /x
в пути, измените ваше отображение на
ProxyPass / ajp://localhost:8009/
так что /x
будет пройдено.
EDIT
В целях ясности и предотвращения множества комментариев я опишу четыре основных способа использования Apache перед Tomcat.
1 - Чистый проход. В этом случае ваша конфигурация Apache выглядит как ProxyPass / ajp://localhost:8009/
(или ProxyPass / http://localhost:8080/
для HTTP-прокси). Экземпляр Tomcat получает тот же URL, что и Apache. Я использовал это, чтобы позволить Apache быть конечной точкой SSL, поскольку это проще и лучше документировано о том, как настроить SSL на Apache. Обычно в этом случае существует только один виртуальный хост Tomcat.
2 - перезапись URL (вроде). Это то, на что ты сейчас смотришь. Конфигурация Apache выглядит как ProxyPass / ajp://localhost:8009/appName/
. Это позволяет вам «скрыть» часть URL appName
. Поэтому, если внешний пользователь запрашивает http://hostname.tld/blah.jpg
, URL-адрес, который отправляется Tomcat, является /appName/blah.jpg
. Единственная проблема с этой настройкой состоит в том, что код на стороне Tomcat, который генерирует ссылку (т. Е. Тег привязки HTML), должен знать, что создать URL, который включает в себя /appName
в нем. В этом случае может быть несколько виртуальных хостов Tomcat, которые могут быть параллельно виртуальным хостам Apache.
3 - Apache обслуживает статические ресурсы. В этом случае ваше отображение в Apache выглядит примерно так: ProxyPass /dynamic ajp://localhost:8009/appName/
. Вы бы запрашивали ресурсы Tomcat как-то вроде http://hostname.tld/dynamic/index.jsp
. Вы переместили бы свои статические ресурсы куда-нибудь, где Apache мог бы получить к ним доступ и обработать это с помощью префикса в URL-адресе, например http://hostname.tld/static/picture.jpg
. Это может быть сделано с помощью правил перезаписи или других конфигураций Apache.
4 - Забудь про Apache. Запустите Tomcat как пользователь, который может связываться с портом 80 (root в Unix-подобных средах) и просто обслуживать все из Tomcat. SSL немного затруднит настройку, но это можно сделать, и контекст веб-приложения (т. Е. /x
в вашем случае) можно устранить несколькими способами, самым простым из которых является размещение вашего контента в ROOT для Tomcat.
Дайте мне знать, если это имеет смысл.