Apache不会遵循符号链接(403 Forbidden)

我在Ubuntu上设置Apache时遇到了一些麻烦。 我一直在遵循这个指南 。

# /usr/sbin/apache2 -v Server version: Apache/2.2.17 (Ubuntu) Server built: Feb 22 2011 18:33:02 

我的公共目录/ var / www可以成功地提供并执行放置在其中的PHP页面。 不过,我想在/ var / www中创build一个符号链接,指向我的主文件夹中的一个目录,并在那里提供页面。

 [root /var/www]# ll total 36 drwxr-xr-x 3 root root 4096 2011-09-11 14:22 . drwxr-xr-x 14 root root 4096 2011-06-04 22:49 .. lrwxrwxrwx 1 root root 16 2011-09-11 13:21 about -> /root/site/about 

当我尝试访问/关于浏览器,我得到

 Forbidden You don't have permission to access /about on this server. 

据我所知,我给了我想要服务的文件足够的权限:

 [root ~/site/about]# ll total 24 drwxr-xr-x 5 root root 4096 2011-09-11 13:20 . drwxr--r-- 3 root root 4096 2011-09-11 13:19 .. drwxr-xr-x 2 root root 4096 2011-09-11 13:21 contact -rwxr-xr-x 1 root root 1090 2011-09-11 13:19 index.php drwxr-xr-x 2 root root 4096 2011-09-11 13:20 me drwxr-xr-x 2 root root 4096 2011-09-11 13:21 resume 

我知道FollowSymLinks选项,我相信它是在我的/ etc / apache2 / sites-enabled / 000-default文件中设置的:

 DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options FollowSymLinks Indexes MultiViews AllowOverride None Order allow,deny allow from all </Directory> 

任何想法,我可能会错过?

检查Apache是​​否拥有/root/root/site/root/site/about执行权限。

跑:

 chmod o+x /root /root/site /root/site/about 

encryption的文件系统也可能导致403错误,例如encryption的主文件夹的符号链接。

如果符号链接指向encryption的文件夹,则apache用户(例如www-data)无法访问内容,即使正确设置了apache和文件/文件夹权限。 www-data用户的访问可以用这样的调用来testing:

 sudo -u www-data ls -l /var/www/html/<your symlink>/ 

有解决方法/解决scheme,例如,将www-data用户添加到您的私人组(将encryption数据公开给Web用户)或设置未encryption的rsynced文件夹(可能相当安全)。 我自己可能会在开发过程中使用rsync解决scheme。

https://askubuntu.com/questions/633625/public-folder-in-an-encrypted-home-directory

为我的目的一个方便的工具是lsyncd 。 这使我可以直接在encryption的主文件夹中工作,并能够在apache网页中立即看到变化。 同步由文件系统中的更改触发,调用rsync。 由于我只是在相当小的网页和脚本上工作,所以同步速度非常快。 我决定在rsync启动之前使用1秒的短暂延迟,尽pipe可以设置延迟0秒

安装lsyncd(在Ubuntu中):

 sudo apt-get install lsyncd 

开始后台服务:

 lsyncd -delay 1 -rsync /home/<me>/<work folder>/ /var/www/html/<web folder>/ 

我有一个类似的问题,我无法在新服务器上解决很长时间。 除了palacsint的回答,还有一个很好的问题是:你使用的是Apache 2.4吗? 在Apache 2.4中,有一个不同的机制来设置使用上述configuration时不起作用的权限,所以我使用了本博客中解释的解决scheme 。

基本上,我需要做的是从我的configuration文件转换:

 Alias /demo /usr/demo/html <Directory "/usr/demo/html"> Options FollowSymLinks AllowOverride None Order allow,deny allow from all </Directory> 

至:

 Alias /demo /usr/demo/html <Directory "/usr/demo/html"> Options FollowSymLinks AllowOverride None Require all granted </Directory> 

请注意订单允许行已经被Require all全部取代

与这个问题有关,我只是想出了为什么我的虚拟主机给了我这个403。

我已经testing了这个问题的所有可能性,其他人没有运气。 这几乎让我发疯。

我正在通过符号链接设置一个类似于Capistrano方式部署的服务器,当我尝试访问DocRoot文件夹(现在是当前版本文件夹的符号链接)时,它给了我403。

我的虚拟主机是:

 DocumentRoot /var/www/site.com/html <Directory /var/www/site.com/html> AllowOverride All Options +FollowSymLinks Require all granted </Directory> 

和我的主要httpd.conf文件(默认的Apache 2.4安装):

 DocumentRoot "/var/www" <Directory "/var/www"> Options -Indexes -FollowSymLinks -Includes (...) 

事实certificate,主要的选项定义是优先于我的虚拟场(对我来说是反直觉)。 所以我把它改为:

 DocumentRoot "/var/www" <Directory "/var/www"> Options -Indexes +FollowSymLinks -Includes (...) 

和尤里卡! (注意MAIN httpd.conf文件中的FollowSymLinks之前的加号,希望这有助于其他一些失去灵魂。

对于升级到14.04之后出现问题的人,在升级之前更改root = / https://askubuntu.com/questions/452042/why-is-my-apache-not-working-after-upgrading-to-ubuntu-14-04升级后的var / www = / var / www / html

先禁用selinux(vim / etc / selinux / config)

vim /etc/httpd/conf/httpd.conf编辑符号链接和目录索引的以下行:

 documentroot /var/www/html <directory /var/www/html> Options Indexes FollowSymLinks AllowOverride None </directory> 

如果.htaccess文件,然后AllowOverride全部

还有另外一种符号链接可能会让你失望,就像我在我的情况中发现的那样。 如果您有一个SELinux系统作为服务器,并且符号链接指向一个NFS挂接的文件夹(其他文件系统可能会产生类似的症状), httpd可能会看到错误的上下文并拒绝提供目标文件夹的内容。

在我的情况下, /var/www/html (可以使用ls -Z获取)的SELinux上下文是unconfined_u:object_r:httpd_sys_content_t:s0/var/www/html的符号链接将具有相同的上下文,但是它们的目标上下文(作为NFS挂接的文件夹)是system_u:object_r:nfs_t:s0

解决scheme是将fscontext=unconfined_u:object_r:httpd_sys_content_t:s0mount选项(例如# mount -t nfs -o v3,fscontext=unconfined_u:object_r:httpd_sys_content_t:s0 <IP address>:/<server path> /<mount point> )。 rootcontext是不相关的, defcontext被NFS拒绝。 我没有尝试context