首页 文章

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

提问于
浏览
79

我'm having some trouble setting up Apache on Ubuntu. I'已经关注this guide .

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

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

[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>

知道我可能错过什么吗?

7 回答

  • 1

    检查Apache是否具有 /root/root/site/root/site/about 的执行权限 .

    跑:

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

    403错误也可能是由加密文件系统引起的,例如, encrypted home folder 的符号链接 .

    如果符号链接指向加密文件夹,则即使正确设置了apache和文件/文件夹权限,apache用户(例如www-data)也无法访问内容 . 可以通过以下呼叫测试对www-data用户的访问:

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

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

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

    一个方便的工具,我的目的是lsyncd . 这允许我直接在我的加密主文件夹中工作,并且能够在apache网页中几乎立即看到更改 . 同步由文件系统中的更改触发,调用rsync . 由于我只处理相当小的网页和脚本,因此同步速度非常快 . 我决定在rsync启动之前使用1秒的短暂延迟,即使可以设置0秒的延迟 .

    安装lsyncd(在Ubuntu中):

    sudo apt-get install lsyncd
    

    启动后台服务:

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

    我有一个类似的问题,我在新服务器上很长时间都无法解决 . 除了palacsint的答案,一个很好的问题是:你使用的是Apache 2.4吗?在Apache 2.4中,有一种不同的机制来设置使用上述配置完成时不起作用的权限,所以我使用了solution explained in this blog post .

    基本上,我需要做的是转换我的配置文件:

    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>
    

    注意 Orderallow 行如何被 Require all granted 替换

  • 0

    与这个问题相关,我只知道为什么我的vhost给了我403 .

    我已经在这个问题上测试了所有可能性而其他人没有运气 . 这几乎让我很生气 .

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

    我的vhost是:

    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
    (...)
    

    事实证明,主要的选项定义优先于我的vhosts fiel(对我来说这是反直觉的) . 所以我把它改成了:

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

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

  • 12

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

  • 5

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

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

    解决方案是将 fscontext=unconfined_u:object_r:httpd_sys_content_t:s0 添加到 mount 选项(例如 # mount -t nfs -o v3,fscontext=unconfined_u:object_r:httpd_sys_content_t:s0 <IP address>:/<server path> /<mount point> ) . rootcontext 无关紧要,NFS拒绝 defcontext . 我没有单独尝试 context .

  • 118

    首先禁用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 all

相关问题