Linux下Apache使用符号链接及权限问题解决

08/16/2012

PHP程序更新是需要保留一些图片文件夹,最近处理@HFLS 2012时更新很频繁,每次都要将图片文件夹移动到新的目录下很麻烦,于是考虑为图片文件夹建立一个符号链接以方便系统更新。

首先要做的是将图片文件夹移动到其他固定位置,在本例,向上移动了两层:

  • 程序代码所在文件夹路径:/path/to/program/src/r100(r100是指版本号,Kaijia习惯于在服务器上保留之前的版本,于是按文件夹来命名,当部署新版本是,只需要上传到新的文件夹,在Apache配置文件中修改一下路径即可完成)
  • 图片所在文件夹路径:/path/to/program/image(在此例中假定图片文件夹的原始路径为/path/to/program/src/r100/image

完成移动文件夹后,在代码文件夹/path/to/program/src/r100中图片文件夹的位置使用ln命令建立符号链接:

建立完成之后,在访问图片会遇到403错误,从Apache日志中可以看到一下两种错误:

这个问题主要是由于Unix权限问题和Apache安全设置造成的,解决方法是在终端中以Root权限运行:

其中www-data是Debian系统下Apache的帐户和组,需要注意的是在这里必须同时将帐户和组修改为www-data。此步骤完成后若仍不能访问,则需要在Apache配置文件中VirtualHost段增加一句:

编辑后的VirtualHost段应该类似于:

完成修改后运行重启一下Apache服务器就可以正常显示了,另外别忘了在自己的程序中修改文件上传的位置。

这个方法给自己开发的程序频繁的更新工作提供了很大的便利,类似的你也可以将程序的配置文件config.php符号链接化,当然这个方法只支持Linux系统,不过Windows系统下也有类似的解决方案大家可以自行搜索。