为什么 Apache 返回 401 Unauthorized 错误?

为什么 Apache 返回 401 Unauthorized 错误?

我在一台 Linux 家用电脑上设置了 Apache。我还为该机器添加了一个 Samba 网络共享。在 Apache 的 Sites-Enabled conf 目录中,我为 example.com 添加了虚拟主机(并将此记录添加到我的 DNS)。此 VHost 提供 /var/www/sambaweb/*,它是 /media/samba/sambaweb/ 的符号链接

Apache 似乎运行良好,我可以在服务器 IP 地址上获取默认页面。但是,当我输入 example.com URL 时,我收到 401 未授权错误。

知道原因吗?知道这个 401 的原因是否记录在任何地方吗?我检查了 Apache 的访问日志和错误日志,但只在访问日志中看到 401,没有错误。

编辑:似乎不是权利问题。我在另一个答案中发现了这一点:

sudo -u www-data ls -l /media/samba/sambaweb/

对我来说它运行良好。www-data显然可以看到所有文件都没有问题。

编辑2:这是一些配置文件

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
    #ServerName www.example.com

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

/etc/apache2/sites-enabled/example.conf

<VirtualHost *:80>
    ServerName example.com  

    ServerAdmin webmaster@localhost
    DocumentRoot /media/samba/sambaweb/example

    <Directory /media/samba/sambaweb/example >
        Options FollowSymlinks
        Order allow,deny
        allow from all
    </Directory>

    LogLevel info

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

答案1

第一个问题是Apache 长期以来一直忽略该allow from all指令;授予所有人访问权限的“新”方法是使用Require all granted;因此,allow from all虚拟主机定义中的指令实际上并未授予所有人访问权限,并且由于尚未明确授予/拒绝任何实体的整体访问权限,因此 Apache 会恢复其默认设置,即拒绝所有人访问。

为了解决这个问题,你应该将行更改allow from all

Require all granted

除此之外:由于您还想自动列出目录的内容,因此还应该添加

Options +Indexes

如果缺失,在没有指令的情况下也会导致 Apache 失败DirectoryIndex(这似乎是这里的情况,这是正确的,因为您不想提供特定的页面)。


总的来说,您的最小虚拟主机配置文件应该如下所示:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /media/samba/sambaweb/example

    <Directory /media/samba/sambaweb/example>
        Require all granted
        Options +Indexes
    </Directory>
</VirtualHost>

答案2

我认为您的配置没有问题。只是缺少一个指令。

DirectoryIndex index.html

您可以添加 DirectoryIndex,或者必须指定整个 URL。

http://example.com/index.html

这是一个对我有用的conf:

<VirtualHost *:80>

ServerAdmin webmaster@localhost
DocumentRoot /media/samba/sambaweb/example

ErrorLog ${APACHE_LOG_DIR}/www.example.com-error.log
CustomLog ${APACHE_LOG_DIR}/www.example.com-access.log combined

HostnameLookups Off
UseCanonicalName Off
ServerSignature On

DirectoryIndex index.html

<Directory /media/samba/sambaweb/example>
   Options +Indexes
   Options +FollowSymLinks
   Options +MultiViews
   AllowOverride None
   Require all granted
</Directory>

</VirtualHost>

最后,还应该检查目录 /media/samba/sambaweb/example 及其中的文件的权限。

相关内容