Tomcat不能访问软连接文件夹的前因后果

来源:互联网 发布:pdf阅读器下载 mac 编辑:程序博客网 时间:2024/05/29 11:34

问题描述:

在Linux系统中部署Tomcat项目,需要为项目中的 某个文件夹设置软链接,将资源文件夹映射到Tomcat目录外,建立连接以后,通过浏览器中直接访问不成功。


起因:

在做Web项目时,经常会在项目根目录(com.myApp)下创建资源目录,比如uploads,用来存放用户上传的图片、文件等等。这种常规的做法没有什么不妥,但是当项目需要频繁更新版本时,就会遇到一些麻烦:

自己在上传网站时一般是将项目文件夹起个别名(com.myApp-beta1.1)整体上传,传到服务器上之后,再将原来的com.myApp下的uploads文件夹复制到com.myApp-beta1.1目录下,然后再把两个文件夹的名称更换一下,重启Tomcat服务器完成升级。

这样做其实很不方便,只是项目前期图省事儿,复制一下资源文件也就几十秒钟,将就将就也就忍了。一旦资源文件过大,这样做就有明显的问题,升级时间明显变长,很不经济。所以有必要寻求一种更为有效的方式来替代这种原始的升级操作。


解决方案:

很自然的就能想到通过文件夹的【关联】、【映射】、或者叫【链接】来解决这个问题。


在硬盘上一个项目之外的位置建立一个同名的资源文件夹,比如/data/uploads,然后再com.myApp目录下新建一个文件夹链接到这个目录:

linux创建软连接(soft link)的命令:

ln -s /data/uploads/ /data/tomcat/webapps/myApp/

这样会在myApp目录下生成一个同名的软连接uploads,在命令行和可视化工具中都可以正常打开这个文件夹。看起来是个很完美的解决方案,以后可以彻底告别复制转移资源文件夹了,只需要上传完以后,执行以下上面的命令就ok了。


问题出现:

本来以为这样就可以了,没想到在测试的时候出现了问题:uploads目录下的静态图片,无法正常在浏览器地址栏里访问到。

勿用质疑,问题肯定出在Tomcat上,猜想Tomcat可能出于安全的考虑对文件、文件夹的连接进行了限制。google了一下,发现Tomcat的一个配置项:allowLinking,默认的配置应该是allowLinking=false,配置成true就可以解决这个问题了。

配置项配置在项目的Context元素上:

<Context path="/" docBase="/myApp" reloadable="true" privilege="true" allowLinking="true"></Context>


扩展阅读:

Tomcat Document摘录:

If the value of this flag is true, symlinks will be allowed inside the web application, pointing to resources outside the web application base path. If not specified, the default value of the flag is false.

NOTE: This flag MUST NOT be set to true on the Windows platform (or any other OS which does not have a case sensitive filesystem), as it will disable case sensitivity checks, allowing JSP source code disclosure, among other security problems.

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html



原创粉丝点击