[翻译]FollowSymLinks
FollowSymLinks
FollowSymLinks 是一个服务器上的配置指令,告诉服务器遵循所谓的符号链接。
它是Follow Symbolic Links
的缩写,是对网站安全性至关重要的一个配置指令。
在接下来的内容中,我们将重点介绍一下关于FollowSymLinks的常识知识以及它与Apache服务器和Drupal内容管理系统的关系。
首先我们要知道在哪儿可以找到FollowSymLinks指令,以及它与什么有关。
httpd.conf和.htaccess文件中的FollowSymLinks
可以在两个地方找到FollowSymLinks指令:httpd.conf和.htaccess文件中。
httpd.conf文件用于服务器配置,这些配置信息在服务器启动之前加载。文件中包含对服务器的默认配置。下面是这个文件的例子演示:
.htaccess文件用于在一些特定文件夹中覆盖服务器的默认配置。下面图片中展示的例子:针对test_files文件夹,.htaccess文件覆盖了httpd.conf文件中的FollowSymLinks配置指令。注意,与httpd.conf文件中的不同:httpd.conf文件中使用的是Options FollowSymLinks
,.htaccess文件中使用的是Options +FollowSymLinks
。
我们知道在哪儿可以找到FollowSymLinks指令之后,下面介绍它用来干什么。
什么是FollowSymLinks
我们已经知道FollowSymLinks告诉服务器在查找文件时遵循符号链接,但是它到底是什么意思呢?
符号链接类似于Windows的快捷方式。网站通常被用来展示一些图片和内容。这些图片和内容的真实地址可能不是你访问的那个地址。假设你的浏览器正在浏览一个网站的内容,然后你点击鼠标右键查看网页源代码,你会发现网页上显示的图片是这样的IMG SRC="/system/files/images/image.png"
。如果你用浏览器打开这个链接,浏览器就会把这个图片展示出来。但是,如果你登录服务器,根据/system/files/images/
这个地址查找图片,最终没有找到这个图片。实际上这个图片没有放在/system/files/images/
文件夹下,而是放在了/pictures
文件夹下。
当你访问网站,浏览器通过/system/files/images/
在服务器上查找图片时,服务器怎么知道要把/pictures
文件夹下的image.png
返给浏览器呢?那么这个所谓的符号链接就是负责做这件事的。在系统中,一个动态链接告诉服务器:如果有人请求/system/files/images/image.png
,那么把/pictures/image.png
返给他。
FollowSymLinks在这里扮演什么角色呢?
FollowSymLinks与服务器的安全相关。在处理服务器时不能让事情模糊不清,你要明确谁对什么有权限。FollowSymLinks指令告诉服务器要不要遵循符号链接。也就是说,在上面的例子中,如果FollowSymLinks被禁止,根据其他配置项,浏览器请求/system/files/images/image.png
可能会得到403或404错误。
符号链接和硬链接之间的区别是什么
除了符号链接,我们也来谈谈硬连接(hard links)。可以在这篇文章找到更多关于硬链接的信息:Difference between symbolic link and hard link。
Drupal FollowSymLinks
FollowSymLinks对于使用了Drupal的网站很重要。因为Drupal默认使用非公开的下载方式,并且在重写URL时使用符号链接。在使用mod_rewrite
时,FollowSymLinks必须是开启的。如果在使用mod_rewrite
时FollowSymLinks是禁用状态,那么你将会遇到500错误。
注意,FollowSymLinks默认在httpd.conf文件中通常是开启状态,所以你不需要再在.htaccess文件中配置这个指令。
还要注意,如果把FollowSymLinks配置在httpd.conf的<Location>
部分,FollowSymLinks将会被忽略。
FollowSymLinks 和性能
FollowSymLinks需要你权衡服务器性能和安全性,根据你的使用场景做决定。
如果FollowSymLinks没有开启,Apache在查找文件时会产生额外的系统开销。比如,假如你的服务器请求/index.html
文档,Apache会在依次/www
,/www/htdocs
和/www/htdocs/index.html
中查找。这些额外的系统开销将会造成延迟。请求结果没有被缓存,那么这些额外的系统开销将会出现在每一次请求中。
如果你注重性能,就使用Options FollowSymLinks
。Options FollowSymLinks
允许Apache以绝大多数Unix应用那样遵循符号链接:Apache不需要检查这个文件是不是符号链接。根据实际情况决定是开启FollowSymLinks还是禁用它。
还有其他地方的配置与FollowSymLinks相关吗?
有。 查看这两篇内容了解更多: Order Allow,Deny 和 IndexIgnore。