我在一台 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。
这是一个对我有用的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 及其中的文件的权限。