我已阅读 StackOverflow 和其他网站上的许多相关权限帖子,但不明白为什么我的 Windows 2008 上的 Apache2.4 虚拟主机似乎工作不一致。主站点正在运行 Drupal,另一个站点本质上是它的克隆,我想在端口 8080 上运行它,作为 Apache 文档中的示例。
在 httpd.conf 中我有
Listen 80
Listen 8080
端口 80 的可以工作,但 8080 的却返回 403 错误页面。
<VirtualHost *:80>
DocumentRoot C:/Server/DOM
ServerName example.edu
<Directory C:/Server/DOM>
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:8080>
DocumentRoot C:/Server/uat
ServerName example.edu
<Directory C:/Server/uat>
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
由于这是 Apache 2.4,因此需要 Require all grant。上面的那个可以工作,但下面的那个不行。我比较了每个目录的权限,没有发现任何差异。.htaccess 是从工作目录复制而来的。
Apache 在其错误日志中返回此内容:
AH01797: client denied by server configuration: C:/Server/uat/
我看到的唯一线索是当我删除端口 80 的虚拟主机并运行 https.exe -S
如您所见,它正在拉入默认服务器并识别虚拟主机的配置。我没有看到任何错误,但显然我做错了。请告诉我下一步应该检查什么。
C:\Users\wattsg>c:\Apache24\bin\httpd.exe -S
VirtualHost configuration:
*:8080 example.edu (C:/Apache24/conf/extra/httpd-v
hosts.conf:25)
ServerRoot: "C:/Apache24"
Main DocumentRoot: "C:/Server/DOM"
Main ErrorLog: "C:/Server/DOM/logs/error.log"
Mutex ssl-stapling-refresh: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="C:/Apache24/logs/" mechanism=default
PidFile: "C:/Apache24/logs/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
我还检查了 Windows Server,以确保 Apache24 的入站端口对所有端口都开放。
答案1
这归结于如何在 Apache 2 中设置虚拟服务器的默认值。在 httpd.conf 文件中,我读到默认服务器将被任何虚拟服务器覆盖。我误读了。httpd.conf 中的配置定义了默认值。然后虚拟服务器设置可以单独更改它们。我的第一个错误是此文件中定义的主根站点占主导地位。这就是它总是出现的原因。我的第二个问题是,即使我正确定义了目录规则,我认为。即使我使用了 Apache 2.4 Require All Granted,它仍然拒绝权限。我在主 conf 文件中设置的这个调整允许它运行。从我所读的内容来看,我希望它是安全的。
允许所有人
要求所有已授予
答案2
取决于 Apache 版本
自 Apache 2.2 起
<目录 your/path>
...
允许所有
...
</目录>
使用 Apache 2.4
<目录 your/path>
...
要求所有授予
... </目录>
根据文档,您可以在“默认保护服务器文件”段落中阅读Apache 2.2 安全提示和Apache 2.4 安全提示。Apache
2.2 不再维护,因此我建议更新到 2.4 以保证主机安全,并重新检查您的配置,阅读有关此版本的文档。我建议检查配置文件中的自定义行,阅读这里。