Настроить символические ссылки для одного каталога в Tomcat
У меня есть каталог, в который процесс загружает некоторые .pdf
файлы. Этот процесс вне моего контроля.
Мне нужно сделать эти файлы доступными через веб-сайт, используя Tomcat.
У меня есть каталог /var/lib/tomcat5/webapps/test1
доступны в Интернете, и я могу видеть файлы в нем с помощью браузера.
Итак, я создал символическую ссылку, указывающую на каталог с .pdf
файлы:/var/lib/tomcat5/webapps/test1/files/
, но я ничего не вижу в этом каталоге.
Как я могу включить символические ссылки в test1
только каталог? Я не хочу включать символические ссылки везде, просто чтобы каталог с .pdf
файлы доступны в Интернете.
7 ответов
Есть несколько проблем с решением создания META-INF/context.xml
который содержит <Context path="/myapp" allowLinking="true">
Самая большая проблема заключается в том, что если conf/context.xml
существует, allowLinking
в <Context>
имеет приоритет над <Context>
в META-INF/context.xml
, И если в conf/context.xml
не определяет явно allowLinking
это то же самое, что сказать allowLinking="false"
, (см. мой ответ на вопрос о приоритетности контекста)
Чтобы убедиться, что ваше приложение позволяет создавать ссылки, вы должны сказать, <Context override="true" allowLinking="true" ...>
,
Другая проблема заключается в том, что path="/myapp"
игнорируется в META-INF/context.xml
, Чтобы избежать путаницы, лучше не указывать. Единственный раз path
в <Context>
оказывает какое-либо влияние на server.xml
и официальные документы Tomcat рекомендуют не ставить <Context>
в server.xml
,
Наконец, вместо myapp/META-INF/context.xml
файл, я рекомендую использовать conf/Catalina/localhost/myapp.xml
файл. Эта техника означает, что вы можете сохранить содержимое вашего META-INF
чистый, который является кишечником вашего веб-приложения - я не люблю рисковать, заглядывая в кишки моего веб-приложения.:-)
Создайте файл context.xml в META-INF
каталог в вашем веб-приложении, содержащий:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myapp" allowLinking="true">
</Context>
больше здесь: http://www.isocra.com/2008/01/following-symbolic-links-in-tomcat/
Да, я знаю, что это старый вопрос, но я нашел новое решение, используя mount с параметром --bind вместо символической ссылки, и tomcat не требует перенастройки:
cd / var / lib / tomcat5 / webapps / test1 /
MKDIR файлы
монтировать --bind / путь / к / текущему / загрузить / каталог / файлы файлов
Это работает по-другому в Tomcat 8+
http://tomcat.apache.org/migration-8.html
<Resources allowLinking="true" />
Есть 4 места, где может жить Context.
- tomcatdir / конф / server.xml
- tomcatdir /CONF / context.xml
- tomcatdir / конф / Каталина / локальный / appname.xml
- tomcatdir / WebApps / имя_приложения /META-INF/context.xml
В случае tomcat 8 атрибут allowlinking должен быть указан не в Context, а в теге Resources. Мой tomcatdir / conf / context.xml выглядит так
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Resources allowLinking="true" cachingAllowed="true" cacheMaxSize="100000" />
</Context>
Это решение отлично работает для меня сейчас. Но я хочу поделиться также ошибкой, которую я сделал, прежде чем прийти к этому решению.
Я определил ресурсы как в tomcatdir/conf/server.xml, так и в tomcatdir / conf / context.xml. И allowLinking="true" был установлен только в tomcatdir/conf/server.xml.
Я обнаружил, что если вы не укажете allowLinking, это будет равно значению false. Поэтому я удалил тег Resources из server.xml и оставил только tomcatdir / conf / context.xml с атрибутом allowLinking="true".
Я сделал это другим способом. Я редактирую этот другой файл конфигурации: apache-tomcat-7.0.33 / conf /server.xml В теге Host я добавил:
<Context path="/data" docBase="C:\datos" debug="0" reloadable="true" crossContext="false"/>
Таким образом, вы можете получить доступ через: http://localhost/data
Добавление следующей строки в conf/context.xml позволяет мне использовать программные ссылки на apache tomcat 8.5+
< Resources allowLinking = "true" cachingAllowed = "true" cacheMaxSize = "100000">