从 Ubuntu 13.04 服务器升级后,www 页面不会自行显示。
错误 403 禁止您无权访问此服务器上的/。
我已经将访问控制保存从 apache2.2 更改为 apache2.4,但这不起作用。我还能做什么?
答案1
发生的情况是 apache2.4 中的配置文件的语法发生了改变。
来源:我升级到 13.10 后也遇到了这种情况
conf.d 文件
所有中的文件/etc/apache2/conf.d
都应移至/etc/apache2/conf-available
。
它们现在的工作方式sites
和mods
功能都相同。只需将您的 conf 文件放入conf-available
文件夹中,然后使用 启用所需的文件即可a2enconf <config-file-name>
。
例子:
conf.d/httpd.conf
我有一个包含 ServerName 指令的文件。
为了使其工作,我必须将其移动到目录conf-available
并手动启用它。
sudo mv /etc/apache2/conf.d/httpd.conf /etc/apache2/conf-available/httpd.conf
sudo a2enconf httpd
站点文件
以前, 中的文件/etc/apache2/sites-available
没有扩展名。例如/etc/apache2/sites-available/default
。现在.conf
需要扩展名。
例子:
如果你有/etc/apache2/sites-available/some-site
,在 13.04 中,你可以使用 启用它sudo a2ensite some-site
。现在它会给你一个错误说
错误:站点某些站点不存在!
要修复此问题,请将 附加.conf
到 中的所有配置文件中sites-available
。您可以在 中执行相同操作sites-enabled
,也可以删除所有文件并手动重新启用它们。
我建议手动执行这些操作,因为您可能需要修复每个 VHost(下一步)。
sudo find /etc/apache2/sites-available/ ! -iname '*.conf' -type f -exec mv '{}' '{}'.conf \;
如果你决定手动执行这些操作:
sudo rm /etc/apache2/sites-enabled/*
sudo a2ensite your-site-name
虚拟主机指令:
允许/拒绝 vs 要求
如果您有以下情况:
<Directory /path/to/your/site/>
order allow,deny
allow from all
</Directory>
它应该变成:
<Directory /path/to/your/site/>
Require all granted
</Directory>
欲了解更多信息,请查看评论经过戴夫·兰登在回答在 Stack Overflow 上。
简单来说,如果您升级到 apache2.4 并保留旧版httpd.conf
apache2.2,allow 指令应该可以正常工作。如果您升级了您的httpd.conf
(我建议这样做),您将收到 403 错误,直到您将Order
/ Allow
/Deny
指令更改为其等效指令Require
。
目录选项
如果您有目录选项,请注意它们都必须以+
或开头-
,或者根本不要以 开头。不允许混合使用两者:
例子:
这是允许的:
<Directory /path/to/your/site/>
Options +Indexes +FollowSymLinks -MultiViews
</Directory>
这是也是如此(请注意,这些示例并不是同时执行相同的操作,前一个示例禁用了该MultiViews
选项,而下一个示例则没有):
<Directory /path/to/your/site/>
Options Indexes FollowSymLinks MultiViews
</Directory>
不再允许这样做:
<Directory /path/to/your/site/>
Options Indexes FollowSymLinks -MultiViews
</Directory>
最后一个配置选项将引发语法错误:
所有选项都必须以 + 或 - 开头,或者没有选项可以。
重启 Apache
完成所有操作后,您需要重新启动 apache 服务器以使更改生效:
sudo apache2ctl restart
您可以找到详细的升级指南官方文档中从 2.2 升级到 2.4。
答案2
我假设该网站正在您的 Ubuntu 服务器上运行。
检查您的 httpd.conf 以确保您的 DocumentRoot 设置指向正确的位置。
检查 DocumentRoot 引用的文件夹的文件权限是否可以由运行 Web 服务器的用户读取。
检查您是否有合适的 index.html/index.htm 等,并且网络服务器没有尝试进行目录列表。
答案3
我遇到了类似的问题。
除非我使用“Allow from All”,否则我无法运行 apache 2.4,这很烦人,因为我想彻底摆脱 2.4 以下版本的束缚。经过多次尝试和搜索后,我发现了对 access_compat 的引用,并意识到这只是为了兼容性。虽然 apache 文档说两者都可以使用,但它建议您不要使用。
我从 /etc/sysconfig/apache2 加载文件中删除了这个模块,这立即解决了我的问题。
问候 Liam
答案4
我正在从非标准目录提供文件,因此为了使升级工作,我必须编辑 /etc/apache2/apache2.conf 并添加:Options Indexes FollowSymLinks AllowOverride None Require all grant
经过此操作以及上述建议的更改后,403 错误消失了。