configuration - qué - Configurar enlaces simbólicos para un solo directorio en Tomcat
directorio de tomcat (6)
Tengo un directorio al que un proceso carga algunos archivos .pdf
. Este proceso está fuera de mi control.
Necesito hacer esos archivos disponibles a través del sitio web usando Tomcat.
Tengo un directorio /var/lib/tomcat5/webapps/test1
disponible para la web y puedo ver los archivos en él con un navegador.
Entonces, creé un enlace simbólico apuntando al directorio con los archivos .pdf
: /var/lib/tomcat5/webapps/test1/files/
, pero no puedo ver nada en ese directorio.
¿Cómo puedo habilitar los enlaces simbólicos solo en el directorio test1
? No quiero habilitar enlaces simbólicos en todas partes, solo para que el directorio con archivos .pdf
esté disponible para la web.
Cree un archivo context.xml en un directorio META-INF
en su aplicación web que contenga:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myapp" allowLinking="true">
</Context>
más aquí: http://www.isocra.com/2008/01/following-symbolic-links-in-tomcat/
Esto funciona de manera diferente en Tomcat 8+
http://tomcat.apache.org/migration-8.html
<Resources allowLinking="true" />
Hay 4 lugares donde el contexto puede vivir.
- tomcatdir / conf / server.xml
- tomcatdir / conf / context.xml
- tomcatdir / conf / Catalina / localhost / appname.xml
- tomcatdir / webapps / appname / META-INF / context.xml
En el caso de tomcat 8, el atributo allowlinking debe especificarse no en Contexto sino en la etiqueta Resources. Mi tomcatdir / conf / context.xml se parece a esto
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Resources allowLinking="true" cachingAllowed="true" cacheMaxSize="100000" />
</Context>
Esta solución funciona bien para mí ahora. Pero quiero compartir también el error que había cometido antes de llegar a esta solución.
Definí Recursos en tomcatdir / conf / server.xml y en tomcatdir / conf / context.xml. Y allowLinking = "true" se configuró solo en tomcatdir / conf / server.xml.
Lo que encontré fue que si no especifica allowLinking, es igual a configurarlo en falso. Así que eliminé la etiqueta Resources de server.xml y la dejé solo tomcatdir / conf / context.xml con el atributo allowLinking = "true" en ella.
Hay algunos problemas con la solución de crear un META-INF/context.xml
que contenga <Context path="/myapp" allowLinking="true">
El mayor problema es que si existe un conf/context.xml
, el allowLinking
en el <Context>
prevalece sobre un <Context>
en un META-INF/context.xml
. Y si el en conf/context.xml
no define explícitamente allowLinking
, eso es lo mismo que decir allowLinking="false"
. (ver mi respuesta a una pregunta de precedencia de contexto)
Para asegurarse de que su aplicación permita el enlace, debe decir <Context override="true" allowLinking="true" ...>
.
Otro problema es que la path="/myapp"
se ignora en un META-INF/context.xml
. Para evitar confusiones, es mejor dejarlo fuera. La única path
tiempo en un <Context>
tiene algún efecto en el server.xml
, y los documentos oficiales de Tomcat recomiendan no poner <Context>
s en un server.xml
.
Finalmente, en lugar de un myapp/META-INF/context.xml
, recomiendo usar un archivo conf/Catalina/localhost/myapp.xml
. Esta técnica significa que puede mantener limpio el contenido de su META-INF
, que es el agallas de su aplicación web. No me gusta arriesgarme a perder el control en las entrañas de mi aplicación web. :-)
Lo hice de esta otra manera. Edito este otro archivo de configuración: apache-tomcat-7.0.33 / conf / server.xml En la etiqueta del Host agregué:
<Context path="/data" docBase="C:/datos" debug="0" reloadable="true" crossContext="false"/>
Entonces, puedes acceder a través de: http://localhost/data
Sí, sé que es una vieja pregunta, pero encontré una nueva solución, usando mount con la opción --bind en lugar de un enlace simbólico, y tomcat no necesita ninguna reconfiguración:
cd / var / lib / tomcat5 / webapps / test1 /
archivos mkdir
mount --bind / path / to / actual / upload / directory / archivos de archivos